0
bind()應該返回原始函數的副本。但是,當將此副本作爲回調傳遞時,將調用原始函數: - (使用Chrome,Firefox和邊緣測試,因此這裏是我的推理錯誤Javascript:事件不是調用提交的綁定(..) - 回調的副本: -/
<html><body>
<script>
// new api to wrap these nested Cordova callbacks ..
ScanDir = function (sPath, rCallback, iStep){
yes = _Yes.bind(rCallback); // should return a copy/newInstance of _Yes !?!
yes.iStep = iStep;
// simulate a cordova callback ..
document.getElementById("test").addEventListener("click", yes);
}
_Yes = function YES(o){
// this is not the new instance returned by bind(..):
alert(_Yes.iStep); // = undefined
alert(YES.iStep); // = undefined
alert(arguments.callee.iStep); // = undefined
alert(yes.iStep); // wrong, 'yes' must not be global...
}
</script>
<span id="test">click here to trigger callback</span>
<script>
// code that uses my new api..
function Go(v){
if (!v.iStep) return ScanDir(v,Go,1);
alert("continue with switch("+v.iStep+")");
}
Go("Music/");
</script>
</body></html>
調試這裏的代碼:http://www.robosoft.de/forums/bug.htm
號,綁定()創建了一個新功能:HTTPS://developer.mozilla。 org/en/docs/Web/JavaScript/Reference/Global_Objects/Function/bind。並且已經是最後一個'alert(yes.iStep);''證明函數對象'yes'(作爲回調提交)是一個不同的函數對象。 爲什麼在提供'yes'作爲回調時調用'_Yes = YES'? 是的,我已allredy與你的soludion繼續前進:'_Yes.bind({「rCallback」:rCallback,「iStep」:iStep}) - 仍然我想理解給出的例子的奇怪行爲。 –
@bornloser並且您閱讀了「說明」部分...? –
嗯,我沒有得到_ **的含義說明:** bind()函數創建一個新的綁定函數(BF)。 BF是一個外來函數對象(來自ECMAScript 2015的一個術語),它包裝了原始函數對象。調用BF通常會導致執行其包裝的函數._: - /我的示例清楚地證明了兩個不同的函數optjects:yes和yes。回叫給出了「是」,但是調用了「是」。我認爲這很奇怪。 –