原來 實際上這段代碼等同於 而如果代碼會如下寫法則a方法會執行 ...
var a=100; function a(){ console.log(a); } a();// a is not a function
原來
- 函數聲明會置頂
- 變數聲明也會置頂
- 函數聲明比變數聲明更置頂
- 變數和複製語句一起書寫,在js引擎解析時,會將其拆成聲明和賦值兩個部分,聲明置頂,賦值保留在原來的位置
- 聲明或的變數不會重覆聲明
實際上這段代碼等同於
var a; //函數聲明 var a; //變數聲明(實際上這裡不會重覆聲明瞭) a = function(){ console.log(a); }; //函數賦值 a = 100;//變數賦值(給a重新賦值了) a()//a is not a function
而如果代碼會如下寫法則a方法會執行
var a; //函數聲明 var a; //變數聲明(實際上這裡不會重覆聲明瞭) a = 100; a=function(){console.log(123)}//函數賦值 a()//123