摘要:與大家分享一下本文適合對于變量提升存疑的小伙伴們查看。下列代碼輸出結(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
摘要:本教程可能不是最精品的,但一定是最細(xì)致的。插件開發(fā)下面我們就來看第二種方式的插件開發(fā)。然后我們的插件代碼在這個方法里面展開。 要說jQuery 最成功的地方,我認(rèn)為是它的可擴(kuò)展性吸引了眾多開發(fā)者為其開發(fā)插件,從而建立起了一個生態(tài)系統(tǒng)。這好比大公司們爭相做平臺一樣,得平臺者得天下。蘋果,微軟,谷歌等巨頭,都有各自的平臺及生態(tài)圈。 學(xué)會使用jQuery并不難,因?yàn)樗唵我讓W(xué),并且相信你接觸...
摘要:下面我跟大家分享關(guān)于標(biāo)識符查找方面的優(yōu)化問題。這個變量對象會首先被放入作用域鏈中。執(zhí)行上下文也有一個作用域鏈,這個作用域鏈就是用來進(jìn)行變量查找的。當(dāng)執(zhí)行上下文創(chuàng)建時,它的作用域鏈會用函數(shù)的屬性來初始化。 前面兩篇文章介紹了Javascript文件在頁面中位置以及異步加載問題對前端性能的影響。不過受限于單線程的原因,不管采用哪種方法,只要Javascript進(jìn)行了耗時的工作,就都會引...
摘要:對于新手來說是最令人困惑的部分之一。函數(shù)聲明通過的形式。很明顯的,語言自身定義和函數(shù)形參已經(jīng)處于作用域頂端。這就意味著,函數(shù)聲明比變量聲明具有更高的優(yōu)先級。但是這卻不意味著對這個名稱的賦值無效,僅僅是聲明的部分會被忽略而已。 原文鏈接:JavaScript Scoping and Hoisting 你知道下面的JavaScript代碼執(zhí)行后會alert出什么值嗎? var foo = ...
摘要:變量作用域一個變量的作用域表示這個變量存在的上下文。在這種情況下,僅僅函數(shù)聲明的函數(shù)體被提升到頂部。雖然我們無需用來修飾形式參數(shù),但是形式參數(shù)的確也是變量,并且被自動提升到次高的優(yōu)先級函數(shù)聲明。 關(guān)于作用域,變量提升,函數(shù)提升的個人理解 參考: 阮一峰的JavaScript參考教程2.7函數(shù)部分 思否上一篇關(guān)于作用域,提升的博客 一篇關(guān)于作用域和提升的個人博客 MockingBird...
摘要:目錄函數(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ù)類型上看:...