var leadingThirtysevenList = list.bind(undefined, 37);
这是在手册中看到的一段关于 bind() 函数传入第二个参数时实现的功能的代码段,其中他将 undefined 作为参数传入。在一些框架中也看到过参数传递 undefined 的做法,但是在网上搜索一直没能找到一个比较完整清晰的回答,想请各位老师给个详细的解答。
仅有的幸福2017-05-19 10:46:01
你提供的这段代码, 为什么传入undefined和我下面的解释可能是无关的。
我主要说说其他一些框架;比如jquery就会传入undefined作为参数,并且会赋给一个空值。
那是因为js的一个bug问题, 那就是undefined能被重写!!, 是的,你没听错。
至于为什么undefined被重写会很危险呢,看下面的代码:
(function (undefined) {
let a;
// 如果a没有值则为a赋值. 但因为undefined被重写了,所以这句根本执行不到。
if (a === undefined) {
a = 'b';
}
})(true);
怪我咯2017-05-19 10:46:01
ECMAScript5.1 15.3.4.4中有解释, 当传入的第一个参数是null, undefined时, 函数的上下文将指向window (node中是global)