2011-09-24 60 views
1

我寫了下面的代碼輸出平方迭代數字的總和內:的Javascript:「變量沒有定義」自我調用函數

(function() { 
    var i = 4, sum = 0; 
    while(i--) sum+=i*i; 
})(); 
console.log(sum); 

的問題是,我得到控制檯以下錯誤:金額是不確定的除非我拿出這個數字並將其聲明爲全球範圍: //這個工作,但這不是我想要的。

sum = 0;  
(function () { 
    var i=4 
    while(i--) sum+=i*i; 
})(); 
console.log(sum); 

有人能幫我理解嗎? 謝謝

+0

這是一個範圍問題。您不能在聲明範圍之外使用'sum'變量。如果您要在全局範圍內記錄sum,那麼您必須在全局範圍內聲明它。我發現使用上面存在的代碼沒有任何問題。 –

回答

1

因爲您在功能範圍之外的線路上訪問sumconsole.log(sum),其中sum不可見。

如果您不想將sum置於全局範圍內,那麼您必須在功能範圍內聲明console.log(sum)

3

自調用函數有其自己的範圍(即爲變量居住),所以sum在函數和所有相關閉包完成執行後不再存在,並且不能從外部訪問。事實上,擁有一個不會破壞全局或其他範圍的單獨範圍是人們使用自我執行功能的主要原因。

5
var sum = (function () { 
    var i=4, sum = 0; 
    while(i--) sum+=i*i; 
    return sum; 
})(); 
console.log(sum); 

您創建了一個名爲sum的局部變量,並希望在它的作用域之外使用它。你不想在更高的範圍內宣佈它,所以你必須出口它。

導出本地(原始)變量的唯一方法是return語句。

0

您正在定義sum裏面的函數是局部變量。並在超出範圍的功能之外打印總和。