我正在测试JavaScript中的立即执行函数。 我发现在Chrome中运行下面的代码时,会抛出Uncaught SyntaxError: Unexpected token )
错误。
function foo(){
console.log(1);
}();
我认为解析器将这段代码拆分为两个部分:一个函数声明和
()
。但如果我在()
之间添加1
会发生什么,结果表明它不会引发任何错误。
所以我想(1);
是一个有效的表达式,但是它代表什么?
谢谢回答。
我正在测试JavaScript中的立即执行函数。 我发现在Chrome中运行下面的代码时,会抛出Uncaught SyntaxError: Unexpected token )
错误。
function foo(){
console.log(1);
}();
()
。但如果我在()
之间添加1
会发生什么,结果表明它不会引发任何错误。
所以我想(1);
是一个有效的表达式,但是它代表什么?
谢谢回答。
(function foo(){
console.log(1);
})(); // call the function here
function foo(){
console.log(1);
}
foo()
(function foo(){
console.log(1);
})();
(1)
单独代表什么意思。 - user1106925()
的函数声明,在另一个函数声明后面有一个单独的(1)
语句。所以他问为什么()
本身无效而(1)
本身有效,并且括号在JS中实际上意味着什么。 - user1106925(function(){
//code goes here
})();
这是您想要的。
将数字1放在这里只是将1作为参数传递给立即函数。如果在传递数字1时在函数内部执行console.dir(arguments),它会打印出您传入的数字。
(function(){
var args = Array.prototype.slice.call(arguments);
console.dir(args); // prints [1][
})(1);
(1)
单独代表什么意思。 - user1106925
(1)
的意思与(1+0)
或var x =2, y=1; (x-y)
相同,即大括号是数学/算术表达式的一部分。由于同样的原因,如果您查看下面的答案,它们只是用()
将函数包围起来以使其正常工作 - 这将声明函数更改为函数表达式。 - slebetman()
,当其未用作函数调用时,就仅仅是一个分组运算符。为了使它成为有效的表达式,至少需要在其中放入一个有效的表达式。这就是为什么当它为空时会出现错误。在您的情况下,1
是一个有效的表达式。如果它们被逗号分隔开,也可以有多个表达式。(1, "foo", some.func("xyz"))
。或者你可以使用它们来覆盖操作符优先级。(2 + 3) * 4
和2 + 3 * 4
不同。 - user1106925