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