如何在不修改全局范围的情况下执行一些javascript?

时间:2013-02-14 14:00:25

标签: javascript

我想调用一些javascript代码,为了它自己的目的需要定义一些变量,但我想隔离它,所以它不会污染全局范围。所以我将所有东西都包装在一个匿名函数对象中,立即调用它,不要将它或结果分配给任何东西:

function() {
    var myInnerHelperFunction = function(object) {
        //do some work
    };

    var anObject = ...;

    myInnerHelperFunction(anObject);
}();

但是我收到语法错误:SyntaxError: Unexpected token (

1 个答案:

答案 0 :(得分:8)

您无法调用函数声明。你需要把它变成一个表达式。最常见的技术是将函数包装在括号中:

(function() {
    var myInnerHelperFunction = function(object) {
        //do some work
    };

    var anObject = ...;

    myInnerHelperFunction(anObject);
}());

但是,请注意,任何一元运算符也会起作用(导致构造为parsed as an expression的任何东西,而不是声明):

~function example() {
    console.log("example");
}();

为了进一步扩展,您的代码实际上会抛出语法错误,因为您的函数缺少标识符。 A"程序"只能包含语句和函数声明。因此,必须将代码解析为函数声明。函数声明必须具有标识符。你没有,所以你的程序是无效的。

当您在函数周围括起括号时,解析树就不同了。括号被解析为"表达式语句",它可以包含表达式。由于函数可以解析为表达式或声明,这取决于它们出现的上下文,这是合法的,并且函数被解析为表达式。由于可以立即调用函数表达式,因此可以正常工作。