学习笔记-你不知道的javascript下卷

1.立即调用函数表达式

函数会创建新的变量作用域,不会影响函数外的变量

var a  = 42;
(function life(){
  var a = 10;
  console.log(a);
})(); //10
a; //42
复制代码

2.闭包

可以将闭包看做‘记忆’并在函数运行完毕后继续访问这个函数的作用域(其变量)的一种方法。

function makeAdder(x) {
  function add(y) {
    return y + x
  }
  return add;
}
var plusOne = makeAdder(1)
var plusTen = makeAdder(10)
plusTen(3) //13
plusOne(5) //6
plusOne(6) //7
复制代码

3.模块

闭包最常见的应用是模块模式。模块允许你定义外部不可见的私有实现细节(变量、函数),同时也可以提供允许从外部访问的公开API。

function User(){
  var vsername, password;
  function doLogin(user, pw) {
    username = user;
    password = pw;
    // 执行剩下的登录工作
  }
  var publicAPI = {
    login: doLogin
  };
  return publicAPI;
}
// 创建一个User模块实例
var fred = User();
fred.login("fred", "123456");
复制代码

函数User()用作外层作用域,持有变量usernamepassword,以及内层的函数doLogin();这些都是这个User模块私有的内部细节,无法从外部访问。

4.this标识符

this并不指向这个函数本身。

function foo() {
  console.log(this.bar);
}
var bar = 'global';
var obj1 = {
  bar: 'obj1',
  foo: foo
};
var obj2 = {
  bar: 'obj2'
};
// -----
foo(); // "global"
obj1.foo(); // "obj1"
foo.call(obj2); // "obj2"
new foo(); // undefined
复制代码

5.原型

当引用对象的某个属性时,如果这个属性并不存在,那么JavaScript会自动使用对象的内部原型引用找到另外一个对象来寻找这个属性。可以将这点看作是属性缺失情况的备用模式。

从一个对象到其后备对象的内部原型引用的链接是在创建对象时发生的。展示着一点的最简单方法就是使用内置工具Object.create(..)

var foo = {
  a: 42
};
//创建bar并将其链接到foo
var bar = Object.create(foo);
bar.b = "hello world";
bar.b; // "hello  world"
bar.a; // 42 <--委托给foo
foo.b; // undefined
复制代码

转载于:https://juejin.im/post/5aabee18f265da237d02c570

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值