20200216

@xiaojingzhao

Plan

继续看你不知道的 js

Notes

this 的默认绑定

在严格模式下,this 的默认绑定会失效。这种失效是指函数运行时,而非函数调用时

// 运行在严格模式下
function foo() {
  "use strict";

  console.log(this.a); // type error
}
foo();
function foo() {
  console.log(this.a); // undefined
}
(function() {
  "use strict";
  foo();
})();

this 的隐式绑定

对象属性引用链中只有上一层或者说最后一层在调用位置中起作用

function foo() {
  console.log(this.a);
}
var obj2 = {
  a: 42,
  foo
};

var obj1 = {
  a: 2,
  obj2
};
obj1.obj2.foo(); // 42

显示绑定

new 和硬绑定:

function foo(p1, p2) {
  this.val = p1 + p2;
}

var bar = foo.bind(null, "p1"); // 部分应用

var baz = new bar("p2"); // 输出:p1p2

绑定规则优先级:new > 显示 > 隐式 > 默认

More