如果把null作为this的绑定对象传入到call、apply或者bind,这些值在调用时会被忽略,实际应用的是默认绑定规则:
function foo(){
console.log(this.a)
}
var a = 2;
foo.call(null); // 2
那么什么情况下会传入null呢?
一种非常常见的做法是使用apply(..)来‘展开’一个数组,并当作一个参数传入一个函数。
类似的,bind(..)可以对参数进行柯力化(预先设置一些参数)(es6中可以用...操作符),这种方法非常有用
function foo(a, b) {
console.log("a: "+ a +",b: " + b)
}
// 把数组‘展开’成参数
foo.apply(null, [2, 3]) // a: 2,b: 3
// 使用bind(..)进行柯里化
var bar = foo.bind(null, 2);
bar(3); // a: 2, b: 3
这两种方法都需要传入一个参数当作this的绑定对象。如果函数并不关心this的话,你仍然需要传入一个占位置,这时null是一个不错的选择。