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)