js中的變量提高

在js中 變量聲明與賦值被認爲是兩個不一樣的操做,引擎首先會對前者進行優先編譯,這部分工做就是找到全部的聲明(例如函數聲明function b(注:非函數表達式),變量聲明var a),既然是優先執行,那麼在一些代碼結構中,後聲明的function,var 變量就會提早解釋;函數

例如 var a=3;引擎會認爲這是兩個操做  var a(聲明); a=3(賦值),簡而言之就是 先有蛋 後有雞,io

  理解了這一點 這就很好解釋以下的代碼結構及其輸出console

a=2;
var a; //定義聲明提高
console.log(a) //獲得2編譯

-------------------分割線-------------------function

console.log( a );//獲得undefined
var a = 2; //等效於var a;//定義聲明置頂               a=2;變量

-------------------分割線-------------------co

foo();  //獲得666工作

function(){分割

console.log(666)函數表達式

}

-------------------分割線-------------------

foo();  //報錯 信息爲 Uncaught TypeError: foo is not a function,由於此時 foo爲undefined,而不是一個函數

var foo = function(){

console.log(6666)

}

相關文章
相關標籤/搜索