此问题在此处已有答案:
(1, eval)('this') vs eval('this') in JavaScript?(4个答案)
六年前就关门了。
截至12小时前,机构群体正在审查是否重新讨论此问题。
我在某人代码中发现了这段代码,它听起来像这样:
(0, function (arg) { ... })(this)
在我试着像下面这样到处玩之后,
(0, function (arg) { console.log(arg) })(2);
console.log((0, 1, 2, 3));
(0, function plus1 (arg) { console.log(arg + 1) }, function plus2 (arg) { console.log(arg + 2) })(5);
我发现它总是返回括号中的最后一项。
我想知道这个编程模式的名字是什么,用例是什么?
3条答案
按热度按时间r3i60tvu1#
在这种特殊情况下,它似乎是多余的,但有时这种方法是有用的。
例如,对于
eval
:当您想要呼叫方法,而不将对象当做
this
值传递时,这个方法也很有用:另请注意,根据上下文,它可能是参数分隔符而不是逗号运算符:
在此方案中,
(0, function (arg) { /* ... */ })
是函数的参数(a=0, b=function (arg) { /* ... */ }
而不是逗号运算符。(然后,最后的
(this)
是对返回函数function() { return a; }
的带参数this
的函数调用。但这部分与逗号运算符/参数分隔符的区别无关)vbopmzt12#
它是一个用self-executing anonymous function Package 的comma operator。但是,我不知道为什么除了obfuscation的目的之外,没有意义的
0
被包括在内。jyztefdp3#
典型例子可以是,
comma operator将从左向右计算表达式,并返回最右侧表达式的结果