当我执行下面的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