小菜蛙成長日記2018001(JavaScript作用域)

羽不落發表於2018-07-10

     今天去參加面試,本來對自己的web前端能力算是比較自信,然後筆試時先做了智力題,算是相當容易了,八成都對,就是面試時,面試官問我的問題可以說是讓我非常萌幣了。本來學習的時候也就是一帶而過,看完就忘記,也就是知道個大概,面試官問我的時候,我就完全回答不上來了。沒啥可說的,除了自己基礎不紮實,真的沒什麼好辯駁的。今天把面試官的問題好好的捋一捋,朝花夕拾。

    1.對javascript的作用域的理解。·

        執行環境(execution  context)是JS的一個重要概念,定義了變數或者函式有權訪問的其他資料,決定了它們各自的行為。每個執行環境都有一個與之關聯的變數物件(varicable object)。

       全域性執行環境是最外圍的執行環境。某個執行環境中所有程式碼執行完畢後,該環境隨之被銷燬,儲存於其中的變數和函式的定義也被銷燬。

function setName(obj){
     obj.name="Nicholas";
     obj=new Object();
     obj.name="Grey";
}
var person=new Object();
setName(person);
alert(person.name);

      以上程式碼輸出的的就是"Nicholas",方法中被定義的的obj在方法執行完畢之後即被銷燬,但是原始的引用仍然保持未變。

      當程式碼在一個環境中執行時,會建立變數物件的一個作用域鏈(scope chain),其用途是為了保證執行環境有權訪問的所有變數和函式有序訪問。

var color ="blue";
function changeColor(){
   if(color === "blue"){
       color="red";
}else{
     color="blue";
}
}
changeColor();
alert("Color is now " + color);
       以上程式碼輸出的應該是 "Color is now  red".


相關文章