當我執行下面的JavaScript片段...綁定使用null或未定義的一個JavaScript功能thisArg
function addAndThis(n1, n2) {
console.log("THIS:" + this + " SUM:" + (n1+n2));
}
var boundNullThisAddAndThis = addAndThis.bind(null);
var boundUndefinedThisddAndThis = addAndThis.bind(undefined);
var boundStringThisAddAndThis = addAndThis.bind("TEST");
addAndThis(10, 20);
boundNullThisAddAndThis(100, 200);
boundUndefinedThisddAndThis(1000, 2000);
boundStringThisAddAndThis(10000, 20000);
...我得到這樣的輸出:
THIS:[object Window] SUM:30
THIS:[object Window] SUM:300
THIS:[object Window] SUM:3000
THIS:TEST SUM:30000
第一和最後一行的產量與我預期的一樣。但爲什麼Function.prototype.bind創建的綁定函數不會使用null或undefined調用包裝函數?我在網上沒有發現任何關於這種行爲的信息。
當您添加 「用嚴格的」;在函數開始時,它的行爲和預期的一樣,所以默認情況下可以將null/undefined轉換爲窗口,除非嚴格模式在播放? – sielakos
是的,如果綁定爲null或未定義,則表示全局上下文 – cstuncsik