我想调用一些javascript代码,为了它自己的目的需要定义一些变量,但我想隔离它,所以它不会污染全局范围。所以我将所有东西都包装在一个匿名函数对象中,立即调用它,不要将它或结果分配给任何东西:
function() {
var myInnerHelperFunction = function(object) {
//do some work
};
var anObject = ...;
myInnerHelperFunction(anObject);
}();
但是我收到语法错误:SyntaxError: Unexpected token (
答案 0 :(得分:8)
您无法调用函数声明。你需要把它变成一个表达式。最常见的技术是将函数包装在括号中:
(function() {
var myInnerHelperFunction = function(object) {
//do some work
};
var anObject = ...;
myInnerHelperFunction(anObject);
}());
但是,请注意,任何一元运算符也会起作用(导致构造为parsed as an expression的任何东西,而不是声明):
~function example() {
console.log("example");
}();
为了进一步扩展,您的代码实际上会抛出语法错误,因为您的函数缺少标识符。 A"程序"只能包含语句和函数声明。因此,必须将代码解析为函数声明。函数声明必须具有标识符。你没有,所以你的程序是无效的。
当您在函数周围括起括号时,解析树就不同了。括号被解析为"表达式语句",它可以包含表达式。由于函数可以解析为表达式或声明,这取决于它们出现的上下文,这是合法的,并且函数被解析为表达式。由于可以立即调用函数表达式,因此可以正常工作。