经典面试题(11):关于变量提升,以下代码将输出什么?
看下面的代碼,輸出的結果是什么?并解釋你的答案。
function test() {
? console.log(a);
? console.log(foo());
?
? var a = 1;
? function foo() {
? ? ?return 2;
? }
}
?
test();//輸出的結果是什么?
答案
這段代碼的執行結果是undefined?和2。
導致這個結果的原因是:變量和函數都被提升到了函數體的頂部。
什么叫提升?是這樣子的,Js代碼的編譯階段會找到所有的聲明,包括變量聲明var a和函數聲明function foo(){}在內的所有聲明都會在代碼被執行前的編譯階段首先被處理,就好像變量聲明和函數聲明從他們代碼中出現的位置被移動到執行環境的頂部,這個過程就叫做提升。
需要注意的是:只有聲明操作會被提升,賦值和邏輯操作會被留在原地等待執行。
因此,當打印變量a時,由于變量提升的原因,它已經被聲明了,所以這個時候去訪問變量a并不會報錯。但它只是被聲明了,未被賦值(賦值出現在打印之后再執行),所以它的值是undefined。
換言之,上面的代碼其實是等同于下面的代碼:
function test() {
? var a;//提升到執行環境頂部
? function foo() {
? ? ?return 2;
? }
?
? console.log(a);
? console.log(foo());
?
? a = 1;
}
?
test();
熱門文章
原創教程原創教程:
附加習題:
職場焦慮:
感到迷茫:
培訓出身:
培訓費用:
搞笑黑話:
職業自由:
職場形象:
總結
以上是生活随笔為你收集整理的经典面试题(11):关于变量提升,以下代码将输出什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云炬随笔20211012(1)
- 下一篇: 经典面试题(2):下面的代码将输出什么到