1 优先级 new绑定>显式绑定>隐式绑定>默认绑定
2 柯里化:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。(.bind()可以进行柯里化)
function foo(p1,p2) {
this.val=p1+p2;
}
var bar=foo.bind(null,"p1");
var baz=new bar("p2");
console.log(baz.val);// p1p2
3 把null,undefined作为this的绑定对象传入call,apply或者bind这些调用会被忽略,应用的是默认绑定规则
4 Object.create(null)不会创建Object.prototype这个委托,比{}更空。
function foo(a,b) {
console.log("a:"+a+",b:"+b);
}
var o=Object.create(null);
foo.apply(o,[2,3]);//a:2,b:3
var baz=foo.bind(o,3);
baz(4);//a:3,b:4
5 apply妙用
Math.max / Math.min 可以实现得到数组中最大/最小的一项 Math.max.apply(null,arr)
Array.prototype.push 可以实现两个数组合并
vararr1=new Array("1","2","3");
vararr2=new Array("4","5","6");
Array.prototype.push.apply(arr1,arr2);
6 间接引用,一般发生在赋值时
function foo() {
console.log(this.a);
}
var a=2;
var o={a:3,foo:foo};
var p={a:4};
o.foo();// 3
(p.foo = o.foo)(); // 2 赋值返回的是目标函数的引用,因此调用位置是foo
p.foo();// 4
7 箭头函数根据当前词法作用域来决定this,会继承外层函数调用的this绑定。