此代码(0,函数)在javascript中的含义是什么

此代码(0,函数)在javascript中的含义是什么,javascript,Javascript,我在某人的代码中找到了这个代码,听起来像这样: (0, function (arg) { ... })(this) 在我试着像下面这样玩之后 (0,函数(arg){console.log(arg)})(2); log((0,1,2,3)); (0,函数plus1(arg){console.log(arg+1)},函数plus2(arg){console.log(arg+2)})(5)它是一个用。但是,我不知道为什么除了目的之外,没有意义的0被包括在内。在这种特殊情况下,它似乎是多余的,但有时

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

(0, function (arg) { ... })(this)
在我试着像下面这样玩之后

(0,函数(arg){console.log(arg)})(2);
log((0,1,2,3));

(0,函数plus1(arg){console.log(arg+1)},函数plus2(arg){console.log(arg+2)})(5)它是一个用。但是,我不知道为什么除了目的之外,没有意义的
0
被包括在内。

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

例如,使用
eval

(函数(){
(0,eval)(“var foo=123”);//间接调用eval,创建全局变量
})();
console.log(foo);//123
(功能(){
eval(“var bar=123”);//直接调用eval,创建局部变量
})();

console.log(条);//参考错误
典型示例可能是

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

这是最重要的,对迷惑人很有用。是的,在那种情况下,我看不出有什么实际的原因。。。
0,
是毫无价值的书,比如与其直接使用iLife,这个人想让自己看起来更聪明:)
它有助于迷惑人
-最好的描述是面试问题,或者试图让自己变得不可或缺,因为没有人理解你的代码。。。你刚才给了我一大堆其他理由,声称JavaScript设计被破坏了……如果你想让它在严格模式下也等效,那么做第二个例子的更好、更可读的方法不是
obj.method.call(window)
?@Whelkaholism应该是
obj.method.call(未定义)
。但这需要函数从
函数.prototype
继承
调用。并非所有可调用对象都继承自
函数。prototype
,即使它们继承了
调用
,也可能会被隐藏。有人能解释为什么会这样吗?javascript似乎用另一个函数包装了一个函数引用,该函数的第一个参数是scope还是context?您可以使用什么来替换0,从而使上述表达式再次为真?@latj
obj.method
生成一个引用,因此当您调用它时,基
obj
将用作
值。但是当你使用逗号运算符时(不管你是使用
0
还是其他什么),引用被解析成一个值。我认为
var a=1,b=2,c=3
不是一个“逗号运算符”,而是一个var声明<这里的code>a
b
c
都是在本地范围内创建的,因此它们实际上都是用
var
声明的。为了举例说明,这里有两个函数:
functionfoo(){var a=1,b=2,c=3;}
functionbar(){var a=(1,b=2,c=3);}
。如果您运行
foo()
a
b
c
将仅存在于本地范围中。但是,如果运行
bar()
,您将在全局范围内找到
b
c
!这是因为
(1,b=2,c=3)
部分现在是您的“逗号运算符”。这是源代码:在“这不是您要查找的逗号”部分下