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