apply,call,bind中的null

如果把null或者undefined作为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是一个不错的选择。

 摘自你不知道的javascript

 
posted @ 2020-02-29 15:49  webbbbbbbbbb  阅读(770)  评论(0编辑  收藏  举报