探究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...