2014-04-28 14 views
10

誰能打破我到步驟如何(它看起來首先簡單)是由瀏覽器解釋:這個簡單的JavaScript腳本如何實際工作(可能是範圍)?

var a = 1; 
function b() { 
a = 10; 
function a() {} 
} 
b(); 
alert(a); 

它會帶來1.如果我想其他人改變函數名到任何東西,等:

var a = 1; 
function b() { 
a = 10; 
function m() {} 
} 
b(); 
alert(a); 

它會提醒10.

+1

這個例子非常常見,您甚至可以將完整的代碼放入您最喜歡的搜索引擎中,並獲得有用的結果... – Bergi

回答

13

var聲明的變量的範圍是在其中聲明它的整個功能,它不在聲明的點開始。它通常被描述爲variable declaration hoisting,可以看作是所有變量聲明移至函數的開頭。對於函數定義,聲明和「assignement」都一起移動。

function b() { 
    a = 10; 
    function a() {} 
} 

相當於

function b() { 
    var a = function() {}; 
    a = 10; 
} 

這意味着你聲明一個新變量aa = 10語句只改變內部變量a,而不是外部的一個。我們說內部變量a會影響外部變量。

在第二種情況下,內部範圍中沒有變量a,這意味着外部變量被使用和更改(當查找變量時,您將從內部範圍轉到閉合鏈之後的最外部範圍) 。

相關問題