摘要:與大家分享一下本文適合對(duì)于變量提升存疑的小伙伴們查看。下列代碼輸出結(jié)果正確的是毫無(wú)疑問(wèn)這道題涉及到了變量提升。就是答案的第一項(xiàng)對(duì)于那些不太熟悉變量提升的人們很容易就會(huì)選錯(cuò),畢竟函數(shù)外部定義一個(gè)變量,函數(shù)內(nèi)輸出值,沒(méi)什么問(wèn)題。
最近看到一道某手機(jī)公司的校招前端筆試題,感覺(jué)很有意思。與大家分享一下
本文適合對(duì)于變量提升存疑的小伙伴們查看。
下列代碼輸出結(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
毫無(wú)疑問(wèn)這道題涉及到了變量提升。答案的第二項(xiàng)是20應(yīng)該是沒(méi)有爭(zhēng)議的,相當(dāng)于
var val=20; console.log(val);
定義一個(gè)變量,再輸出。
就是答案的第一項(xiàng)對(duì)于那些不太熟悉變量提升的人們很容易就會(huì)選錯(cuò),畢竟
var val = 12; function fun1(){ console.log(val);//12 } fun1();
函數(shù)外部定義一個(gè)變量,函數(shù)內(nèi)輸出值,沒(méi)什么問(wèn)題。
那如果題目是這樣呢:
var val = 12;
function fun1(){
console.log(val);//12 val = 20; console.log(val);//20
}
fun1();
函數(shù)外部定義一個(gè)變量,函數(shù)內(nèi)部先輸出得12再重新進(jìn)行賦值,再次輸出得20。
那么我們回到一開(kāi)始的題目。
題目是這樣
下列代碼輸出結(jié)果正確的是:()
var val = 12; function fun1(){ console. log(val);//undefined var val = 20; console.log(val);//20 } fun1();
和上面比,不同的地方在于函數(shù)內(nèi)部輸出過(guò)一次后又重新定義并賦值,雖然只是多了個(gè)val,但結(jié)果就不一樣了,他影響著第一個(gè)val的輸出值。
為什么第一個(gè)輸出值為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被提升到了頂端,但它被賦予的值并沒(méi)有提升,所以第一個(gè)console.log(val)輸出的只是定義過(guò)但沒(méi)有被賦值的val,第二個(gè)console.log輸出的是被賦值20的val。
所以這道題的答案為C。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/103840.html
摘要:本教程可能不是最精品的,但一定是最細(xì)致的。插件開(kāi)發(fā)下面我們就來(lái)看第二種方式的插件開(kāi)發(fā)。然后我們的插件代碼在這個(gè)方法里面展開(kāi)。 要說(shuō)jQuery 最成功的地方,我認(rèn)為是它的可擴(kuò)展性吸引了眾多開(kāi)發(fā)者為其開(kāi)發(fā)插件,從而建立起了一個(gè)生態(tài)系統(tǒng)。這好比大公司們爭(zhēng)相做平臺(tái)一樣,得平臺(tái)者得天下。蘋(píng)果,微軟,谷歌等巨頭,都有各自的平臺(tái)及生態(tài)圈。 學(xué)會(huì)使用jQuery并不難,因?yàn)樗?jiǎn)單易學(xué),并且相信你接觸...
摘要:下面我跟大家分享關(guān)于標(biāo)識(shí)符查找方面的優(yōu)化問(wèn)題。這個(gè)變量對(duì)象會(huì)首先被放入作用域鏈中。執(zhí)行上下文也有一個(gè)作用域鏈,這個(gè)作用域鏈就是用來(lái)進(jìn)行變量查找的。當(dāng)執(zhí)行上下文創(chuàng)建時(shí),它的作用域鏈會(huì)用函數(shù)的屬性來(lái)初始化。 前面兩篇文章介紹了Javascript文件在頁(yè)面中位置以及異步加載問(wèn)題對(duì)前端性能的影響。不過(guò)受限于單線(xiàn)程的原因,不管采用哪種方法,只要Javascript進(jìn)行了耗時(shí)的工作,就都會(huì)引...
摘要:對(duì)于新手來(lái)說(shuō)是最令人困惑的部分之一。函數(shù)聲明通過(guò)的形式。很明顯的,語(yǔ)言自身定義和函數(shù)形參已經(jīng)處于作用域頂端。這就意味著,函數(shù)聲明比變量聲明具有更高的優(yōu)先級(jí)。但是這卻不意味著對(duì)這個(gè)名稱(chēng)的賦值無(wú)效,僅僅是聲明的部分會(huì)被忽略而已。 原文鏈接:JavaScript Scoping and Hoisting 你知道下面的JavaScript代碼執(zhí)行后會(huì)alert出什么值嗎? var foo = ...
摘要:變量作用域一個(gè)變量的作用域表示這個(gè)變量存在的上下文。在這種情況下,僅僅函數(shù)聲明的函數(shù)體被提升到頂部。雖然我們無(wú)需用來(lái)修飾形式參數(shù),但是形式參數(shù)的確也是變量,并且被自動(dòng)提升到次高的優(yōu)先級(jí)函數(shù)聲明。 關(guān)于作用域,變量提升,函數(shù)提升的個(gè)人理解 參考: 阮一峰的JavaScript參考教程2.7函數(shù)部分 思否上一篇關(guān)于作用域,提升的博客 一篇關(guān)于作用域和提升的個(gè)人博客 MockingBird...
摘要:目錄函數(shù)的聲明函數(shù)的屬性和方法函數(shù)的作用域閉包知識(shí)點(diǎn)小結(jié)關(guān)于函數(shù),可以從以下個(gè)方面去理解首先,數(shù)據(jù)類(lèi)型上看函數(shù)在中是一種數(shù)據(jù)類(lèi)型,是對(duì)象的一種其次,從功能上看函數(shù)本質(zhì)上是一段反復(fù)調(diào)用的代碼塊最后,從地位上看函數(shù)在中和其他基本數(shù)據(jù)類(lèi)型一樣,可 目錄 1.函數(shù)的聲明 2.函數(shù)的屬性和方法 3.函數(shù)的作用域 4.閉包知識(shí)點(diǎn) 5.小結(jié) 關(guān)于函數(shù),可以從以下3個(gè)方面去理解:首先,數(shù)據(jù)類(lèi)型上看:...