天天看點

執行個體淺析javascript變量作用域

全局域變量在局部可見,局部變量在全局不可見

var global_value = 'global value'; 

func();

console.log(local_value);

function func(){

   var local_value = 'local_value';

  console.log(global_value);

}

輸出: 1.global value 2.Uncaught ReferenceError: local_value is not defined anonymous function 是以,局部域可以修改全局域變量的值 var global_value = 'global value'; 

func();

console.log(global_value);

function func(){

  global_value = 'local_value';

  console.log(global_value);

} 輸出: 1.local_value 2.local_value 上面的例子可作為javascript作用域鍊scope chain的例證 更多scope chain的内容可參考javascript:the definitive guide 深入了解變量作用域一節

局部域重複聲明覆寫全局域

var global_value = 'global value'; 

func();

console.log(global_value);

function func(){

   var global_value = 'local_value';

  console.log(global_value);

} 輸出: 1.local_value 2.global_value 此例可作為javascript作用域鍊scope chain的例證

塊級作用域無效 即如if語句中聲明的變量在if語句外可見 func(); 

function func(){

  console.log(inner_value);

   if(true){

     var inner_value = 'inner_value';

  }

  console.log(inner_value);

}

輸出: 1.undefined 2.inner_value undefined指聲明了但未定義,可能是定義的相關語句在後面的緣故

隐式聲明預設實作為全局變量,擁有全局作用域 即使在局部域中聲明也是實作為全局域變量 func(); 

console.log(inner_value);

function func(){

  inner_value = 'inner_value';

  console.log(inner_value);

}

繼續閱讀