经典面试题(2):下面的代码将输出什么到控制台?
緊接著昨天的面試題(1),我們今天繼續(xù)學(xué)習(xí)一道經(jīng)典的面試題。
這道題一般會以筆試題的形式出現(xiàn),題目如下,看代碼:
(function(){var a = b = 3; })();
console.log(typeof a == 'undefined');
console.log(typeof b == 'undefined');
問:下面的代碼將輸出什么到控制臺,為什么?
這個時候,部分開發(fā)者就會認為,變量a和b都是聲明定義在匿名函數(shù)內(nèi)部的,屬于函數(shù)內(nèi)的局部變量,如果要在函數(shù)外部進行打印調(diào)用,a和b則為undefined。所以最后兩行代碼打印的結(jié)果都是true。
然而結(jié)果并非如此,之所以這么理解的原因是,他們把
var a = b = 3;這句代碼錯誤地理解為等同于:
var b = 3;var a = b;
而事實上,它等同于:
b = 3;var a = b;
區(qū)別在哪里相信你也看出來來,這個時候的變量b聲明是不加關(guān)鍵字var的,也就是說變量b是全局變量(隱式全局變量)。
所以最后我們得到的結(jié)果分別是:true和false。
刁鉆一點的面試官可能會追問:在嚴格模式下(使用 use strict),又會是什么結(jié)果?
這里就要注意一點了,在嚴格模式下我們運行后得到的結(jié)果是:
報錯:b is not undefined這也正是因為嚴格模式的這個特點,可以避免很多不必要的bug(全局變量污染)。
這道題的關(guān)鍵點在于理解javascript變量定義的特殊情況。希望大家緊記這一點,明天繼續(xù)下一道經(jīng)典面試題。
熱門文章
原創(chuàng)教程
原創(chuàng)教程:《ECMAScript 6 教程》
附加習(xí)題:《ECMAScript 6 教程》測試題
原創(chuàng)教程:《Vue2.0基礎(chǔ)教程》
原創(chuàng)教程:《Vue2.0進階教程》
附加習(xí)題:《Vue2.0基礎(chǔ)教程》測試題
趣味職場
職場感悟:混口飯吃,談不上喜歡
學(xué)習(xí)困惑:工作用jquery,原生js知道就夠
職場焦慮:程序員回三四線城市能干啥?
感到迷茫:我很努力,但依然很迷茫
薪資待遇:那么點工資,能招到人嗎?
培訓(xùn)出身:我是一個培訓(xùn)出身的程序員
培訓(xùn)費用:花1.8萬參加前端培訓(xùn),值嗎?
培訓(xùn)簡歷:簡歷包裝成1-2年經(jīng)驗,咋辦?
搞笑黑話:互聯(lián)網(wǎng)公司黑話,搞笑到爆
職業(yè)自由:程序員職業(yè)自由的6個階段
職場形象:在別人眼里,程序員是這樣的
合作推廣分割線
總結(jié)
以上是生活随笔為你收集整理的经典面试题(2):下面的代码将输出什么到控制台?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经典面试题(11):关于变量提升,以下代
- 下一篇: 云炬随笔20211012(2)