成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關(guān)于JavaScript變量提升方面需要注意的地方

youkede / 1671人閱讀

摘要:與大家分享一下本文適合對于變量提升存疑的小伙伴們查看。下列代碼輸出結(jié)果正確的是毫無疑問這道題涉及到了變量提升。就是答案的第一項(xiàng)對于那些不太熟悉變量提升的人們很容易就會選錯,畢竟函數(shù)外部定義一個變量,函數(shù)內(nèi)輸出值,沒什么問題。

最近看到一道某手機(jī)公司的校招前端筆試題,感覺很有意思。與大家分享一下
本文適合對于變量提升存疑的小伙伴們查看。

下列代碼輸出結(jié)果正確的是:()

var val = 12;
function fun1(){
   console. log(val);
   var val = 20;
   console.log(val);
}
fun1();

A.12 20

B.12 12

C.undefined 20

D.20 undefined

毫無疑問這道題涉及到了變量提升。答案的第二項(xiàng)是20應(yīng)該是沒有爭議的,相當(dāng)于

var val=20;
console.log(val);

定義一個變量,再輸出。
就是答案的第一項(xiàng)對于那些不太熟悉變量提升的人們很容易就會選錯,畢竟

 var val = 12;
 function fun1(){
   console.log(val);//12
 }
 fun1();

函數(shù)外部定義一個變量,函數(shù)內(nèi)輸出值,沒什么問題。
那如果題目是這樣呢:
var val = 12;
function fun1(){

console.log(val);//12
val = 20;
console.log(val);//20

}
fun1();

函數(shù)外部定義一個變量,函數(shù)內(nèi)部先輸出得12再重新進(jìn)行賦值,再次輸出得20。
那么我們回到一開始的題目。
題目是這樣

下列代碼輸出結(jié)果正確的是:()

var val = 12;
function fun1(){
   console. log(val);//undefined
   var val = 20;
   console.log(val);//20
}
fun1();

和上面比,不同的地方在于函數(shù)內(nèi)部輸出過一次后又重新定義并賦值,雖然只是多了個val,但結(jié)果就不一樣了,他影響著第一個val的輸出值。
為什么第一個輸出值為underfined,
其實(shí)上面的代碼等同于var val = 12;

function fun1(){
   var val;
   console. log(val);//undefined
   val = 20;
   console.log(val);//20
}
fun1();

由于函數(shù)內(nèi)重新定義val,導(dǎo)致變量val被提升到了頂端,但它被賦予的值并沒有提升,所以第一個console.log(val)輸出的只是定義過但沒有被賦值的val,第二個console.log輸出的是被賦值20的val。
所以這道題的答案為C。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/103840.html

相關(guān)文章

  • [轉(zhuǎn)載]jQuery插件開發(fā)詳細(xì)教程

    摘要:本教程可能不是最精品的,但一定是最細(xì)致的。插件開發(fā)下面我們就來看第二種方式的插件開發(fā)。然后我們的插件代碼在這個方法里面展開。 要說jQuery 最成功的地方,我認(rèn)為是它的可擴(kuò)展性吸引了眾多開發(fā)者為其開發(fā)插件,從而建立起了一個生態(tài)系統(tǒng)。這好比大公司們爭相做平臺一樣,得平臺者得天下。蘋果,微軟,谷歌等巨頭,都有各自的平臺及生態(tài)圈。 學(xué)會使用jQuery并不難,因?yàn)樗唵我讓W(xué),并且相信你接觸...

    kevin 評論0 收藏0
  • 前端優(yōu)化-Javascript篇(3.標(biāo)識符查找優(yōu)化)

    摘要:下面我跟大家分享關(guān)于標(biāo)識符查找方面的優(yōu)化問題。這個變量對象會首先被放入作用域鏈中。執(zhí)行上下文也有一個作用域鏈,這個作用域鏈就是用來進(jìn)行變量查找的。當(dāng)執(zhí)行上下文創(chuàng)建時,它的作用域鏈會用函數(shù)的屬性來初始化。   前面兩篇文章介紹了Javascript文件在頁面中位置以及異步加載問題對前端性能的影響。不過受限于單線程的原因,不管采用哪種方法,只要Javascript進(jìn)行了耗時的工作,就都會引...

    KaltZK 評論0 收藏0
  • [翻譯] JavaScript Scoping and Hoisting

    摘要:對于新手來說是最令人困惑的部分之一。函數(shù)聲明通過的形式。很明顯的,語言自身定義和函數(shù)形參已經(jīng)處于作用域頂端。這就意味著,函數(shù)聲明比變量聲明具有更高的優(yōu)先級。但是這卻不意味著對這個名稱的賦值無效,僅僅是聲明的部分會被忽略而已。 原文鏈接:JavaScript Scoping and Hoisting 你知道下面的JavaScript代碼執(zhí)行后會alert出什么值嗎? var foo = ...

    FingerLiu 評論0 收藏0
  • JS筆記四:作用域、變量(函數(shù))提升

    摘要:變量作用域一個變量的作用域表示這個變量存在的上下文。在這種情況下,僅僅函數(shù)聲明的函數(shù)體被提升到頂部。雖然我們無需用來修飾形式參數(shù),但是形式參數(shù)的確也是變量,并且被自動提升到次高的優(yōu)先級函數(shù)聲明。 關(guān)于作用域,變量提升,函數(shù)提升的個人理解 參考: 阮一峰的JavaScript參考教程2.7函數(shù)部分 思否上一篇關(guān)于作用域,提升的博客 一篇關(guān)于作用域和提升的個人博客 MockingBird...

    FuisonDesign 評論0 收藏0
  • JavaScript函數(shù)(二)

    摘要:目錄函數(shù)的聲明函數(shù)的屬性和方法函數(shù)的作用域閉包知識點(diǎn)小結(jié)關(guān)于函數(shù),可以從以下個方面去理解首先,數(shù)據(jù)類型上看函數(shù)在中是一種數(shù)據(jù)類型,是對象的一種其次,從功能上看函數(shù)本質(zhì)上是一段反復(fù)調(diào)用的代碼塊最后,從地位上看函數(shù)在中和其他基本數(shù)據(jù)類型一樣,可 目錄 1.函數(shù)的聲明 2.函數(shù)的屬性和方法 3.函數(shù)的作用域 4.閉包知識點(diǎn) 5.小結(jié) 關(guān)于函數(shù),可以從以下3個方面去理解:首先,數(shù)據(jù)類型上看:...

    用戶84 評論0 收藏0

發(fā)表評論

0條評論

youkede

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<