[JavaScript](0, function)()的作用
经常看到这样的JavaScript代码:
var o = {
f: function(){
console.log(this);
}
}
(0, o.f)();
这样做的目的是改变f的执行环境,也就是改变this。
直接调用o.f:
o.f();
//{f: ƒ}
再试试间接调用:
(0, o.f)();
//Window...
可以看出this已经是Window了。
逗号运算符会从左往右求值,并返回最后一个表达式的值,(0, o.f)
返回的是一个函数,此时这个函数的作用域是全局,相当于:var f = o.f
。
必须要用0
吗?其实任何表达式
都可以:
(1, o.f);
(1+1, o.f);
(true, o.f);
()
是不是必须的呢?要调用返回的函数,或者将返回的函数赋值给某个变量,括号就是必须的。下面的代码肯定是不能正确运行的:
0, o.f(); //this指向o
var f = 0, o.f //Unexpected token '.'
我们需要()
来将语句转换为表达式,这也是经常用到的方法,比如下面的代码,需要将x = 2
这条语句转换为表达式:
true && (x = 2)
END