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绑定。