關於JS作用域問題,是面試的時候面試官樂此不疲的面試題,有時候確實是令人抓狂,下面這篇文章主要給大家分享了關於javascript作用域的一些常見面試題,需要的朋友可以參考借鑒,下面來一起看看吧。
推薦相關文章:2020年最全js面試題整理(最新)
本文主要跟大家分享了關於javascript作用域面試題的相關內容,分享出來供大家參考學習,下面來一起看看吧。
一、作用域:
在了解作用域之前,首先要先明白一些基礎概念:
#每一個變數、函數都有其作用的範圍,超出作用不得使用,這個叫做作用域。
二、全域變數、局部變數:
1.全域變數:
(1)在全域範圍內宣告的變量,如var a=1;
(2)只有賦值沒有宣告的值,如a= 2;
(註:如果a=2在函數環境中,也是全域變數)
2.局部變數:
3.功能:
三、作用域鏈:
找出量的過程。先找自己局部環境有沒有宣告或是函數,如果有,請看宣告有無賦值或是函數的內容,如果沒有,就往上一級尋找。四、預解析順序:
每個程式都要做的工作,程式開始先預解析語法,標點符號是否有誤,解析記憶體是否可容納,解析變數…直到解析無誤了,才開始按正常的流程順序走。試想一下,如果沒有預解析順序,直接按流程順序走,可能程式執行到最後一個函數,發現了語法錯誤,才開始報錯,那效能要有多差啊!
順序內容:
變數名稱,不解析值,如var a=2;將var a解析在環境的開頭,不解析後面的值,只有當程式執行到
var a=2這行時,才會給變數賦值),function解析到本區塊的開頭。
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();
六、總結:
相關學習推薦:
以上是關於javascript常見面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!