[JS]看看在各scope(execution context)的hoisting情況

  • 146
  • 0

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