亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于javascript作用域的常見面試題分享

發布時間:2020-09-29 15:25:29 來源:腳本之家 閱讀:173 作者:這麻雀 欄目:web開發

本文主要給大家分享了關于javascript作用域面試題的相關內容,分享出來供大家參考學習,下面來一起看看吧。

一、作用域:

在了解作用域之前,首先需要明白一些基礎概念:

每一個變量、函數都有其作用的范圍,超出作用不得使用,這個叫做作用域。

二、全局變量、局部變量:

1.全局變量:

     (1)在全局范圍內聲明的變量,如var a=1;

     (2)只有賦值沒有聲明的值,如a=2; (注:如果a=2在函數環境中,也是全局變量)

2.局部變量:

      寫入函數中的變量,叫做局部變量。

3.作用:

     (1)程序的安全。

     (2)內存的釋放。

三、作用域鏈:

查找量的過程。先找自己局部環境有沒有聲明或者是函數,如果有,則查看聲明有無賦值或者是函數的內容,如果沒有,則向上一級查找。

四、預解析順序:

每個程序都要做的工作,程序開始先預解析語法,標點符號是否有誤,解析內存是否可容納,解析變量……直到解析無誤了,才開始按正常的流程順序走。試想一下,如果沒有預解析順序,直接按流程順序走,可能程序執行到最后一個函數,發現了語法錯誤,才開始報錯,那性能要有多差啊!

順序內容:

      1.文件內引用的<script>塊依次解析,從上到下連成一片。

      2.每個script塊內部的var(注意:只解析變量名,不解析值,如var a=2;將var a解析在環境的開頭,并不解析后面的值,只有當程序執行到var a=2這行時,才會給變量賦值),function解析到本塊的開頭。

      3.依次解析每個環境,將var,function解析到環境的開頭。

五、應用場景(一些常見的作用域相關的面試題):

var a="aa";
function test(){
 alert(a);//undefined,函數執行后,在函數環境內,var a會預解析,當彈出a時,首先先找本層環境內有無聲明,發現有。但是代碼沒有執行到賦值,所以結果是undefined。
 var a="bb";//var a會預解析在函數開頭,執行到這行才進行賦值
 alert(a);//“bb”
}
test();
alert(a);//"aa" 找全局環境下的聲明,找到了var a="aa"
var a="aa";
function test(){
 alert(a);//“aa”,函數執行后,在函數環境內,沒有找到本層環境關于a的聲明,所以開始向上一層環境查找。
 a="bb";//執行到這行開始改變全局a的量
}
test();
alert(a);//"bb" 全局環境的a在函數執行時已經被改變
function test(){ 
 b();//函數b會被預解析,因此可以調用,執行了輸出1;
 var a=1;
 function b(){
  console.log(1);
  console.log(a);//undefined
  var a=2;
 }
}
test();

六、總結:

要搞清楚一個變量的作用域,重點是搞清楚預解析順序,然后再判斷作用域的范圍,這些都是有套路可言:先找本層環境有無聲明,有的話,看是否進行了賦值;只有聲明沒有執行賦值,就是undefined。沒有聲明也沒有賦值的話,就再向上一層查找,直到找到為止。如果所有的執行環境都沒有找到,那么控制臺就會報錯變量找不到。

函數的話就更簡單了:找本層環境是否有預解析的函數,有的話即可執行。沒有的話還是向上查找。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳山县| 益阳市| 永康市| 全椒县| 梁平县| 平度市| 台南市| 沙河市| 甘洛县| 汝州市| 康平县| 大姚县| 奉化市| 阿合奇县| 五指山市| 广汉市| 延津县| 南涧| 姜堰市| 榆中县| 江山市| 云安县| 突泉县| 威海市| 达州市| 汨罗市| 微山县| 东阿县| 遂昌县| 凤台县| 武邑县| 平安县| 雷山县| 南宁市| 乌拉特前旗| 蒙城县| 博客| 西畴县| 台州市| 皋兰县| 安阳县|