此代码(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,从而使上述表达式再次为真?@latjobj.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)
部分现在是您的“逗号运算符”。这是源代码:在“这不是您要查找的逗号”部分下