首頁 >web前端 >js教程 >關於javascript常見面試題

關於javascript常見面試題

微波
微波原創
2017-06-28 13:26:243577瀏覽

關於javascript常見面試題

關於JS作用域問題,是面試的時候面試官樂此不疲的面試題,有時候確實是令人抓狂,下面這篇文章主要給大家分享了關於javascript作用域的一些常見面試題,需要的朋友可以參考借鑒,下面來一起看看吧。

推薦相關文章2020年最全js面試題整理(最新)

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

一、作用域:

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

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

二、全域變數、局部變數:

1.全域變數:

    (1)在全域範圍內宣告的變量,如var a=1;

     (2)只有賦值沒有宣告的值,如a= 2;(註:如果a=2在函數環境中,也是全域變數)

2.局部變數:

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


3.功能:

     (1)程序的安全。


     (2)記憶體的釋放。

三、作用域鏈:

找出量的過程。先找自己局部環境有沒有宣告或是函數,如果有,請看宣告有無賦值或是函數的內容,如果沒有,就往上一級尋找。

四、預解析順序:

每個程式都要做的工作,程式開始先預解析語法,標點符號是否有誤,解析記憶體是否可容納,解析變數…直到解析無誤了,才開始按正常的流程順序走。試想一下,如果沒有預解析順序,直接按流程順序走,可能程式執行到最後一個函數,發現了

語法錯誤,才開始報錯,那效能要有多差啊!

順序內容:

      1.文件內所引用的3f1c4e4b6b16bbbd69b2ee476dc4f83a區塊依序解析,從上到下連成一片。


      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。沒有聲明也沒有賦值的話,就再向上一層查找,直到找到為止。如果所有的執行環境都沒有找到,那麼控制台就會報錯變數找不到。

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

相關學習推薦:

javascript影片教學

以上是關於javascript常見面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn