2013-08-01 90 views
4

第一次測試:如何理解全球和局部變量在javascript

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

第二次測試:

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

在第一次測試,a等於1,雖然我將它設置爲10方法。在第二個測試中,我將其設置爲10,並在輸出時設置爲10 ..這是如何工作的?

+0

這個例子及其解釋在這裏提供:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html –

回答

2

函數聲明function a() {}b函數的局部範圍內聲明一個變量名a(併爲其分配功能)。當您分配給a時,您將分配給該局部變量而不是全局變量。

隨着衝頂施加,代碼就等於

var b = function b() { 
    var a = function a() {}; 
    a = 10; 
    return; 
} 
var a = 1; 
b(); 
alert(a); // 1, obvious now 
2

因爲吊起創建了一個局部變量a,它會在嘗試爲其分配值之前掩蓋全局變量。

+0

我明白了。非常棘手。感謝您的快速答覆。 –

0

在你的第一次測試,您創建存儲在本地變量一個a功能:

function b() { 
    a = 10; 
    return; 
    function a() {} // can be called using a() inside this function 
} 

所以,你可以調用使用a()這個函數你的函數裏面b()。試試:

function b() { 
    a(); // alerts "hi" 
    a = 10; 
    return; 
    function a() { alert("hi"); } 
} 

現在,你在本地變量中存儲數字10而不是函數。全局變量保持不變,因此你的外警報仍顯示1

0

第一個例子將被解釋(由JavaScript)爲:

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

在JavaScript中,所有的本地變量(在這種情況下,本地變量a將保存該函數)在函數的頂部聲明。

局部變量a被設置爲10而不是全局。它在返回後不再存在。