2015-10-20 23 views
0

我的代碼:無法在函數中引用腳本級變量?

f(); 

var a = {v: 10}; 

function f() { 
    console.log(a.v); 
} 

給出undefined沒有財產v錯誤。

然而,下面的代碼工作:

var a = {v: 10}; 

var f = function() { 
    console.log(a.v); 
} 

f(); 

爲什麼沒有第一個版本的工作?

+0

您調用一個函數,函數被輸入,您的var聲明被跳過。只需使用您的開發控制檯來調試腳本,您將看到會發生什麼。 – csmckelvey

回答

4

提升將函數聲明和變量聲明移到頂部,但不移動任務。

因此,你首先代碼變得

var a; 
function f() { 
    console.log(a.v); 
} 
f(); 
a = {v: 10}; 

所以當f被調用時,a仍然undefined

但是,第二個代碼變得

var a, f; 
a = {v: 10}; 
f = function() { 
    console.log(a.v); 
}; 
f(); 

所以當f被調用時,a已被分配。

0

這是由於訂單。當你在第一個版本中調用函數時,那麼json沒有被定義。所以它試圖獲取未定義對象的屬性。

所以有必要在聲明對象後調用該函數。

相關問題