将javascript函数与null或undefined绑定为thisArg

时间:2016-07-21 07:29:58

标签: javascript function null undefined currying

当我执行以下javascript代码段时...

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调用包装函数?我没有在网上找到任何有关此行为的信息。

1 个答案:

答案 0 :(得分:2)

尝试将非对象用作上下文时,最有可能出现问题。试图使用原语(fn.call(1))实际上#34;框"值,将原语转换为对象以用作上下文。

.call() .apply().bind()功能全部采用" nully"值并使用默认的window对象。

正如其他人所指出的那样(并且也在MDN页面上),这在严格模式下不会发生。奇怪的是,虽然大部分时间严格的模式都会给你戴上手套,但在这种情况下,它相信你知道你在做什么! ; P

[MDN]