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