2013-06-21 69 views
0
<script> 
    name = "Tim"; 
    function greet() { 
     console.log(name); 
     var name = "David" ; 
    } 
    greet(); 
</script> 

爲什麼結果顯示「未定義」?我預計蒂姆或大衛。js中變量聲明的問題

+3

使用變數名稱= 「添」 – Markipe

+0

這裏是廣泛說明[http://stackoverflow.com/a/9085872/2413470][1] [1]:HTTP://計算器。 com/a/9085872/2413470 – spring

回答

3

第一個「名字」聲明是一個全局變量。 在函數內部,你再次聲明它,所以你失去了全局的可見性。但是你在變量被定義之前使用這個變量。

name = "Tim"; // global name here 
function greet() { 
    // var name; // here name is automatically declared (because of hoisting) but undefined 
    console.log(name); // here you use name before it is defined 
    var name = "David" ; // here name is defined 
} 
greet(); 

JavaScript在函數中有範圍,這很重要。 Google爲'javascript提起'會有所幫助。

+0

+1正確。 Javascript會在新範圍中看到該變量的重新聲明,因此它會取消原始內容,但在設置之前會使用它。 – musicnothing

1

恰克像這樣,

var name = "Tim"; 
function greet() { 
    console.log(name); 
    name = "David" ; 
} 
greet();