这个代码(0,函数)在javascript中是什么意思

时间:2016-12-05 04:34:16

标签: javascript

我在某人的代码中找到了这段代码,听起来像这样:

(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 个答案:

答案 0 :(得分:32)

在这种特殊情况下,它似乎是多余的,但有时这种方法很有用。

例如,使用eval



(function() {
  (0,eval)("var foo = 123"); // indirect call to eval, creates global variable
})();
console.log(foo);            // 123
(function() {
  eval("var bar = 123");     // direct call to eval, creates local variable
})();
console.log(bar);            // ReferenceError




当您想要调用方法而不将对象作为this值传递时,它也很有用:



var obj = {
  method: function() { return this; }
};
console.log(obj.method() === obj);     // true
console.log((0,obj.method)() === obj); // false




另请注意,根据上下文,它可能是参数分隔符而不是逗号运算符:



console.log(
  function(a, b) {
    return function() { return a; };
  }
  (0, function (arg) { /* ... */ })(this)
); // 0




答案 1 :(得分:4)

典型的例子可能是,

for(var i=0,j=10; i < j; i++){
 // code ...
}

comma operator将从左到右评估表达式并返回最右边表达式的结果

// e.g.

var a = 1, b= 2, c = 3, d = function(){ console.log("a => " +  a) }()

答案 2 :(得分:2)

comma operator包裹着self-executing anonymous function。但是,我不知道除了obfuscation之外,为什么包含无意义的0