我一直认为括号主要是一种组织代码的方法,并确保操作顺序顺序正确。但是,我最近遇到了一些代码,让我想知道他们是否会在幕后做其他事情。
我假设在这个代码块中包含函数定义的括号是为了便于阅读:
(function foo(){alert('hello world!')})();
但是,如果删除它们,我会收到错误。
function foo(){alert('hello world!')}(); //SyntaxError: Unexpected token )
这种情况很有意义,因为我可以想象函数末尾的}
结束语句而()
被调用独立于函数(抛出相同的错误),而将函数包装在括号中会返回该函数,然后可以调用该函数。
但是,以下代码有效:
(function foo(){alert('hello world!')}())
这与第二个代码块相同,除了整个事物都用括号括起来。我不知道为什么它没有像function foo(){alert('hello world!')}()
那样抛出同样的错误,并且希望有人可以对这个问题有所了解。