最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年06月18日 15:43:58   作者:這麻雀  
關于JS作用域問題,是面試的時候面試官樂此不疲的面試題,有時候確實是令人抓狂,下面這篇文章主要給大家分享了關于javascript作用域的一些常見面試題,需要的朋友可以參考借鑒,下面來一起看看吧。

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

一、作用域:

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

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

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

1.全局變量:

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

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

2.局部變量:

      寫入函數(shù)中的變量,叫做局部變量。

3.作用:

     (1)程序的安全。

     (2)內(nèi)存的釋放。

三、作用域鏈:

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

四、預解析順序:

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

順序內(nèi)容:

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

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

      3.依次解析每個環(huán)境,將var,function解析到環(huán)境的開頭。

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

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

六、總結:

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

函數(shù)的話就更簡單了:找本層環(huán)境是否有預解析的函數(shù),有的話即可執(zhí)行。沒有的話還是向上查找。

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

相關文章

  • javascript實現(xiàn)函數(shù)柯里化與反柯里化過程解析

    javascript實現(xiàn)函數(shù)柯里化與反柯里化過程解析

    這篇文章主要介紹了javascript實現(xiàn)函數(shù)柯里化與反柯里化過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • js 表單提交后按鈕變灰的實例代碼

    js 表單提交后按鈕變灰的實例代碼

    這篇文章介紹了js 表單提交后按鈕變灰的實例代碼,有需要的朋友可以參考一下
    2013-08-08
  • JS使用定時器與事件監(jiān)聽實現(xiàn)輪播圖切換功能

    JS使用定時器與事件監(jiān)聽實現(xiàn)輪播圖切換功能

    現(xiàn)在很多網(wǎng)站都有輪播圖,下面這篇文章主要給大家介紹了關于JS如何使用定時器與事件監(jiān)聽實現(xiàn)輪播圖切換功能的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • JavaScript實現(xiàn)翻轉圖片的三種方法小結

    JavaScript實現(xiàn)翻轉圖片的三種方法小結

    有時,我們可能需要翻轉Web應用中的媒體元素,所以這篇文章小編為大家詳細介紹了三種使用JavaScript翻轉圖片的方法,希望對大家有所幫助
    2024-01-01
  • javascript簡化代碼 A=alert w=document.writeln

    javascript簡化代碼 A=alert w=document.writeln

    建議不要這樣寫代碼,考慮以后的修改才是最重要的,代碼分層.多把一個功能寫成一個js代碼或一個類,然后提供接口,這種寫法代碼會更多,速度也更慢,但人人都推薦這樣寫,是因為這樣子維護方便.而程序不可能一次性寫得完美的,永遠都可以改進
    2008-02-02
  • 淺談javascript六種數(shù)據(jù)類型以及特殊注意點

    淺談javascript六種數(shù)據(jù)類型以及特殊注意點

    這篇文章主要介紹了javascript六種數(shù)據(jù)類型以及特殊注意點,有需要的朋友可以參考一下
    2013-12-12
  • javascript實現(xiàn)簡單打字游戲

    javascript實現(xiàn)簡單打字游戲

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)簡單打字游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Javascript迭代、遞推、窮舉、遞歸常用算法實例講解

    Javascript迭代、遞推、窮舉、遞歸常用算法實例講解

    今天小編就為大家分享一篇關于Javascript迭代、遞推、窮舉、遞歸常用算法實例講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Javascript復制實例詳解

    Javascript復制實例詳解

    最近接了個項目,其中有項目需求是這樣的,需要復制內(nèi)容到剪切板,因為有眾多瀏覽器,所以兼容性很重要,下面通過本文給大家介紹Javascript復制實例詳解,對js復制相關知識感興趣的朋友一起學習吧
    2016-01-01
  • JS解決IOS中拍照圖片預覽旋轉90度BUG的問題

    JS解決IOS中拍照圖片預覽旋轉90度BUG的問題

    下面小編就為大家?guī)硪黄狫S解決IOS中拍照圖片預覽旋轉90度BUG的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論

齐齐哈尔市| 昭觉县| 清水河县| 巴彦淖尔市| 湘乡市| 原平市| 巧家县| 陇川县| 南充市| 罗定市| 广丰县| 兴业县| 昌都县| 武冈市| 遂平县| 舞阳县| 灵丘县| 溧阳市| 田林县| 呼伦贝尔市| 巩义市| 曲水县| 长治县| 桦甸市| 开原市| 淮阳县| 丰镇市| 宽城| 五华县| 三门县| 钦州市| 绥化市| 崇义县| 怀化市| 金阳县| 南涧| 应城市| 桂阳县| 普兰店市| 保康县| 称多县|