一道關(guān)于JavaScript變量作用域的面試題
小編覺得這道題對理解JavaScript 作用域還是很有幫助的,特此又把自己的解題思路梳理了一遍,希望對其它人有所幫助。
首先看下面試題:
var arr = [1, 2, 3]; for (var i = 0, j; j = arr[i++];) { console.log(j); } console.log('---------'); console.log(i); console.log('---------'); console.log(j); console.log('---------');
在解題前,我們先回顧下 JavaScript 中,變量域相關(guān)的知識。
全局變量(Global)
全局變量是指在任何地方都可以訪問的變量,有兩種情況
在 function 外面聲明,不論是否用 var 關(guān)鍵字
在 function 里面聲明,不使用 var 關(guān)鍵字,當(dāng)然聲明的語句必須被執(zhí)行才可以
局部變量(Local )
局部變量只能在被聲明的 function 內(nèi)部才能訪問
在 function 里面聲明,使用 var 關(guān)鍵字
兩點(diǎn)要注意的地方
先看代碼:
alert(i); // 輸出 undefined for (var i = 0; i < 1; i++){}; alert(i); // 輸出1
JavaScript 不存在語句作用域,在語句內(nèi)定義的變量會擴(kuò)散到語句外邊, 例子中 i 在 for 語句中聲明,但是在 for 語句的外面任然可以訪問
在 for 語句之前就可以訪問到 i ,只不過這時候還沒有被賦值
開始我們的解題
i++ 是在 i 使用后再自加:
第一次執(zhí)行時,j=arr[0],之后 i=1,console.log(j) 輸出 1
第二次執(zhí)行時,j=arr[1],之后 i=2,ocnsole.log(j) 輸出 2
第三次執(zhí)行時,j=arr[2],之后 i=3,ocnsole.log(j) 輸出 3
第四次(不符合 for 條件),j=arr[3] 為 undefined,之后 i=4,ocnsole.log(j) 沒有輸出,退出 for 循環(huán)
for 語句執(zhí)行結(jié)束后,console.log(i) 由上分析可知輸出 4,console.log(j) 輸出 undefined
最后輸出結(jié)果為:
2 --------- --------- undefined ---------
針對上面的分析和結(jié)果,想必大家都已經(jīng)搞清楚了吧,然后我們開始舉一反三吧。
借題改題一
題目:
var arr = [1, 2, 3];
for (var i = 0, j; j = arr[++i];) { console.log(j); } console.log('---------'); console.log(i); console.log('---------'); console.log(j); console.log('---------');
答案:
2 3 --------- 3 --------- undefined ---------
借題改題二
題目:
function xxx() { var arr = [1, 2, 3]; for (var i = 0, j; j = arr[i++];) { console.log(j); } } xxx(); console.log('---------'); console.log(i); console.log('---------'); console.log(j); console.log('---------');
答案:
1 2 3 --------- 報錯:Uncaught ReferenceError: i is not defined
為大家就分享到這,希望對大家理解JavaScript作用域有所幫助。
- 詳解JS中的this、apply、call、bind(經(jīng)典面試題)
- 關(guān)于javascript作用域的常見面試題分享
- 10道典型的JavaScript面試題
- 80%應(yīng)聘者都不及格的JS面試題
- Javascript前端經(jīng)典的面試題及答案
- 一道面試題引發(fā)的對javascript類型轉(zhuǎn)換的思考
- JavaScript中最常見的三個面試題解析
- JS搜狐面試題分析
- JavaScript面試題(指針、帽子和女朋友)
- 關(guān)于js原型的面試題講解
- JavaScript面試題大全(推薦)
- AngularJS 面試題集錦
- js前端面試題及答案整理(一)
- 14 個折磨人的 JavaScript 面試題
- JS面試題---關(guān)于算法臺階的問題
- 一道優(yōu)雅面試題分析js中fn()和return fn()的區(qū)別
- 一道常被人輕視的web前端常見面試題(JS)
- 最新Javascript程序員面試試題和解題方法
相關(guān)文章
js表數(shù)據(jù)排序 sort table data
對于表格的排序,是很不錯的一個功能,方便用戶快速的分析一些數(shù)據(jù)。2009-02-02實(shí)例詳解JavaScript靜態(tài)作用域和動態(tài)作用域
作用域是指程序源代碼中定義變量的區(qū)域,作用域規(guī)定了如何查找變量,也就是確定當(dāng)前執(zhí)行代碼對變量的訪問權(quán)限,這篇文章主要給大家介紹了關(guān)于JavaScript靜態(tài)作用域和動態(tài)作用域的相關(guān)資料,需要的朋友可以參考下2021-10-10JS的鼠標(biāo)監(jiān)聽mouseup鼠標(biāo)抬起失效原因及解決
這篇文章主要為大家介紹了JS的鼠標(biāo)監(jiān)聽mouseup鼠標(biāo)抬起失效原因及解決示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05JavaScript判斷是否為數(shù)字的多種方法小結(jié)
這篇文章主要介紹了JavaScript判斷是否為數(shù)字的多種方法小結(jié),本文給大家分享三種方法,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01javascript設(shè)計模式 – 適配器模式原理與應(yīng)用實(shí)例分析
這篇文章主要介紹了javascript設(shè)計模式 – 適配器模式,結(jié)合實(shí)例形式分析了javascript適配器模式相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04uniapp實(shí)現(xiàn)微信小程序的電子簽名效果(附demo)
本文主要介紹了uniapp實(shí)現(xiàn)微信小程序的電子簽名效果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05