js代碼的執行分爲兩個步驟函數
1.預解析code
提高(hoisting) JavaScript代碼在預解析階段,會對以var聲明的變量名,和function開頭的語句塊,進行提高操做
2.執行ip
func(); function func(){ alert("Funciton has been called"); } //變量的提高 alert(a); var a = 1; //提高以後的代碼模擬 var a; alert(a); a = 1;
函數同名,如何提高ci
預處理的時候,會將兩個函數所有提高,可是後面的函數會覆蓋掉前面函數it
func1(); //last function func1(){ console.log('This is first func1'); } func1(); //last function func1(){ console.log('This is last func1'); } //預解析提高後的代碼 function func1(){ console.log('This is first func1'); } function func1(){ console.log('This is last func1'); } func1(); //last func1(); //last
變量和函數同名io
在提高的時候,若是有變量和函數同名,會忽略掉變量,只提高函數console
alert(foo); //undefined 函數體 function foo(){} var foo = 2; alert(foo); //2 //預解析 提高後的代碼 function foo(){}; alert(foo); foo=2; alert(foo);