我很好奇为什么这有效:
var c = {
d: function myFunc() {
console.log(this === window);
}
};
var a = {
b: function() {
console.log(this === a);
(0,c.d)();
c.d();
}
};
a.b();
控制台输出:
True
True
False
所以看来是这样的(0, c.d)()
是相同的c.d.call(window)
,但我似乎找不到太多关于其工作原理或原因的信息。谁能解释一下吗?
From:
Fiddle: http://jsfiddle.net/wPWb4/2/ http://jsfiddle.net/wPWb4/2/
如果您编写多个用逗号分隔的表达式 (,
),那么所有表达式都会被求值,但最终会得到最后一个表达式的值:
var x = (1,2,3);
console.log(x); // this will log "3"
Now (0,c.d)
是一个将返回函数的表达式c.d
, 但现在c
不是this
的功能了。这意味着this
将指向全局对象(window
),或者在严格模式下保持未定义。使用其中任何一个都会得到相同的效果:
var f = function(x) { return x; };
f(c.d)();
Or just
var f = c.d;
f();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)