2017-10-10 120 views
0

我想知道在調用outerfunc之後答案的值是多少。特別對它背後的推理感興趣(例如,爲什麼innerfunc的返回值沒有替換全局範圍中存儲在var x中的值?)謝謝!結果的價值是什麼?

var x = 10; 

function outerfunc() { 
    x = 20; 
    function innerfunc() { 
    var x = x + 20; 
    return x; 
    } 
    innerfunc(); 
} 

outerfunc(); 

var answer = x; 
+0

你可以只嘗試... – Thilo

回答

1

Re爲什麼innerfunc的返回值沒有替換全局作用域中存儲在var x中的值?

因爲您在innerfunc中創建了一個名爲x的新變量。嘗試從行var x = x + 20中刪除var;

+0

好,不過只要innerfunc被調用,爲什麼難道不innerfunc開始尋找最接近X中outerscopes,在這種情況下x = 20? – JeroenT

+0

因爲通過在innerfunc中使用var語句,您可以在innerfunc的範圍內創建一個名爲x的新變量。代碼不需要在innerfunc之外進行搜索。總之,你已經創建了兩個完全獨立的變量。你看到的困惑是因爲你給它們命名都是一樣的。根據建議刪除var,然後innerfunc應該找到x的外部範圍實例。 –

+0

明白了!超級克里斯,謝謝 – JeroenT

0

當您聲明與全局變量名稱相同的局部變量時,全局變量在該函數中變爲不可見。

function innerfunc() { 
    var x = x + 20; // here there is no global x. so it is NaN 
    return x; 
} 

看到這個

var x = 10; 
 

 
function outerfunc() { 
 
x = 20; 
 
function innerfunc() { 
 
    var x = x + 20; 
 
    alert("value of x in innerFun " + x); 
 
} 
 
innerfunc(); 
 
} 
 
outerfunc(); 
 
alert("global value of x is " + x);