2013-02-14 49 views
1

我想調用一些JavaScript代碼,爲了自己的目的需要定義一些變量,但我想隔離這個,所以它不污染全球範圍。所以,我在一個匿名函數對象包裝的一切,立即打電話給它,不給它分配或者結果的任何東西:如何在不修改全局範圍的情況下執行一些JavaScript?

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

    var anObject = ...; 

    myInnerHelperFunction(anObject); 
}(); 

但我得到一個語法錯誤:SyntaxError: Unexpected token (

回答

8

你不能調用函數聲明。你需要改爲表達式。最常見的技術來實現這一目標是包裹在括號中的功能:

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

    var anObject = ...; 

    myInnerHelperFunction(anObject); 
}()); 

但是請注意,任何一元運算符也將工作(任何導致的結構是parsed as an expression,而不是一個聲明):

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

爲了擴大在這個進一步,你的代碼實際上是因爲你的功能缺失的標識符拋出一個語法錯誤。 「程序」只能包含語句和函數聲明。因此,你的代碼必須被解析爲一個函數聲明。函數聲明必須有一個標識符。你的不是,所以你的程序是無效的。

當您在函數中包圍括號時,解析樹是不同的。圓括號被解析爲一個「表達式語句」,它可以包含一個表達式。由於函數可以被解析爲表達式或聲明,這取決於它們出現的上下文,這是合法的,函數被解析爲一個表達式。由於可以立即調用函數表達式,所以這可以起作用。

相關問題