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