探究Global環境與function內的hoisting現象
概念:
Hoisting是JavaScript的特性,會先把function以及變數給存入記憶體當中
今天在global的環境(Global execution context)下,如果以function來看,可以把宣告放在function invoke下面,因為有hoisting,可以呼叫成功
b();//hoisting function function b(){ console.log("call b"); }
如果以變數來看的話,因為有hoisting所以會印出undefined而不是not define
console.log(myVar);//變數的hoisting,會印出undefined var myVar = "hihihi";
延伸:
如之前所提到的,function呼叫都會產生一個execution context,所以我們這邊可以推測也會產生hoisting
以function來看:
function a(){ inner();//inner在function a裏頭也會hoisting function inner(){ console.log("inner hihihi"); } }
會印出inner hihihi,所以也是會有hoisting的。
若以變數來看呢?
function a(){ console.log(newVar); //newVar在function a裏頭也會hoisting,不會取得外部的newVar var newVar; } var newVar = "Hello I'm global" a();
結果在a()中console.log會印出undefined。故不會取得外部的newVar,所以function裡頭也做瞭hoisting…