2017-10-11 86 views
0

我正在檢查凱爾的辛普森書「你不知道JS:這個&對象原型」的代碼,並堅持代碼示例,它寫在下面。javascript currying參數與.bind()方法

難道有人可以解釋一下,在執行var bar = foo.bind(null, 2);段代碼後,bar變量如何將「a」參數保存爲2並保存該保存的參數,以及爲什麼bar(3);代碼執行時不會覆蓋參數?

function foo(a, b) { 
 
    console.log(a, b); 
 
    console.log("a:" + a + ", b:" + b); 
 
} 
 

 
foo.apply(null, [1, 10]); 
 

 
var bar = foo.bind(null, 2); 
 
bar(3);

+3

它在bind'的'定義:*在'綁定()'方法創建一個,當所謂的新功能,將其''this'關鍵字設置爲提供的值,並在調用新函數時提供給定的**參數序列前的任何**參數***它只是它的作用。它在內部究竟如何是無關緊要的。 – deceze

+0

調試時,我發現我可以通過執行bar.call('BoundArgs')'代碼通過原型訪問bar params。 – tawreon

+0

你能證明一下究竟是什麼結果,以及你如何「訪問」參數? – deceze

回答

0

您也可以在1日(本)參數和 綁定後添加額外的參數將這些值傳遞給原有的功能。任何 稍後傳遞給綁定函數的附加參數將在綁定參數後傳入 。

所以,在你的榜樣的情況下:

function foo(a, b) { 
    console.log(a, b); 
    console.log("a:" + a + ", b:" + b); 
} 

var bar = foo.bind(null, 2); 

這裏,我們只有通過一個參數後this參考參數和對a。如果你這樣稱呼它:

bar();// here a is 2 and b is undefined(no parameter passed). 

bar(3);// a is 2 and b is 3 

bar(3);等同於:

foo.bind(null, 2, 3); 
bar(); 
+0

請評論指出,如果你認爲答案不正確。我不知道我的錯誤與那個downvote –