js變數提升

weixin_34194087發表於2017-03-10

JS把定義在後面的變數(並不賦值)或函式(整個函式)提升到前面定義。
作用域(scoping)
變數提升(Hoisting)

最簡單的栗子:

var v='Hello World'; 
(function(){ 
  alert(v); //undefined
  var v='I love you'; 
})() 

變數提升:

預編譯期宣告變數不賦值
執行期賦值

(function() {
    var a = 'One';
    var b = 'Two';
    var c = 'Three';
})()
等價於
(function() {
    var a, b, c;
    a = 'One';
    b = 'Two';
    c = 'Three';
})()

函式提升

函式提升是把整個函式都提到前面去

函式表示式

var a=function(){}

函式宣告式

function a(){})

重點:只有"函式宣告形式"才能被提升。

函式宣告:
function myTest(){ 
  foo(); //這裡成功
  function foo(){ 
    alert("我來自 foo"); 
  } 
} 
myTest(); 
函式表示式:
function myTest(){ 
  foo(); //foo is not a function
  var foo =function foo(){ 
    alert("我來自 foo"); 
  } 
} 
myTest(); 

相關文章