ie js 沒有許可權 一道奇怪的JS面試題 一

2021-10-13 16:20:51 字數 1783 閱讀 9726

題目如下:

var a = 0;

if (true)

a = 21;

console.log(a);

}console.log(a);

按照正常思路, 我們應該考慮變數提公升.

即是說, **等價於如下效果

function a() 

var a = 0;

if (true)

console.log(a); //21

但話說回來, 把函式宣告寫在判斷語句中, 如果 被看做**塊的話

那麼函式的宣告應在**塊內做提公升.

即是說, **等價於如下效果

var a = 0;

if (true)

a = 1;

a = 21;

console.log(a); //21

}console.log(a); //0

然而實際的結果卻不是這樣的

先來看看ie的結果

21

21//以上列印結果為ie瀏覽器 10版本

但是到了ie11 和 最新的 edge瀏覽器就變了

21

function a()

//以上列印結果為ie瀏覽器 11版本 和 edge瀏覽器

顯然ie11認為, 函式宣告為全域性, 並且, 函式也沒有進行提公升, 而是當成了表示式

因此, **等價於

var a = 0;

if (true)

a1 = 21;

console.log(a1); //21

}console.log(a); // fn...

我們再測試谷歌和火狐瀏覽器:

21

1//以上列印結果為chrome瀏覽器 76.0.3809.87版本

谷歌瀏覽器跟火狐一致認為, 直到出現了函式宣告, 變數a才出現了區域性作用

函式依然被當成了表示式, 而不是乙個宣告

即是說, **等價於如下

var a = 0;

if (true)

a1 = 21;

console.log(a1); //21

}console.log(a); // 1

當函式被宣告在判斷語句內部時,

所有瀏覽器都將函式宣告當成了表示式(賦值宣告)

並且, 對於是否為全域性宣告, 也有分歧.

永遠不要把函式定義在條件判斷中

為什麼要出這種奇怪的題目來考察別人呢

是心理的扭曲? 還是道德的淪喪? ^_^

其實吧, 作為乙個正常的程式設計師

你或許從來不會把函式定義在判斷語句中

不知道很正常

知道了也不能說明什麼.

eric:如何用js檢測瀏覽器型別​zhuanlan.zhihu.com

eric:js棧結構的簡單封裝​zhuanlan.zhihu.com

eric:如何講清楚函式防抖?​zhuanlan.zhihu.com

eric:formdata簡介​zhuanlan.zhihu.com

一道JS面試題引發的血案

剛入職新公司,屬於公司萌新一枚,一天下午對著螢幕看 架構時。bi專案組長給我看了一道面試別人的js面試題。雖然答對了,但把理由說錯了,照樣不及格。話不多說,直接上題 var a 1 switch a result 最後什麼都不會輸出 看完題如果答對並且知道理由的小夥伴,僅當加深印象 如果你也像我一樣...

js一道很誇張的面試題

如題 var a 0 if true a 21 console.log 裡面 a console.log 外部 a 一開始 我認為結果很簡單 就是2個21 後來用谷歌瀏覽器 一列印 結果 竟然是 21和1 唯一的解釋 預解析的時候 應該是這樣的 var a a 0 0function a a 1 c...

關於一道JS面試題的思考

題目 for var i 0 i 5 i 1000 console.log new date,i 1 面對這段 時給出的結果也不盡相同,以下是典型的答案 a.20 的人會快速掃瞄 然後給出結果 0,1,2,3,4,5 b.30 的人會拿著 逐行看,然後給出結果 5,0,1,2,3,4 c.50 的人...