詳談js的變量提升以及使用方法
介紹
變量提升Hoisting是人們對JavaScript執(zhí)行上下文工作方式的一種認(rèn)識,并不是官方給出的改變
從字面上理解,變量提升的意思是變量和函數(shù)的聲明會在物理層移動到作用域的最前面。但是這樣理解并不準(zhǔn)確,效果是相同的,但是實際的實現(xiàn)方式是JavaScript的變量和函數(shù)的聲明會在編譯階段放入內(nèi)存
這意味著使用者在正式聲明一個函數(shù)或者變量之前就能夠使用它
函數(shù)的提升
在JavaScript中,在聲明一個函數(shù)前,我們就能夠使用它,大家應(yīng)該都體驗過,像這樣:
test(); function test() { // do something }
在正常的使用情況下,應(yīng)該需要先聲明函數(shù)才能調(diào)用,但是這種方法仍然能夠運行,這是因為JavaScript自動將函數(shù)聲明事先存入了內(nèi)存的原因,看起來就像JavaScript自動把函數(shù)聲明提升到了最前面
變量的提升
對于變量,JavaScript使用類似的方法,但是要注意一點的是,對于變量的提升,JavaScript只會將變量聲明提升,但是不會把初始化提升,如果在變量初始化之前使用,則會得到undefined
// undefined console.log(a); // ReferenceError: b is not defined console.log(b); var a = 10;
// undefined console.log(num); num = 6; // 6 console.log(num); num += 7; // 13 console.log(num); var num;
// undefined console.log(num); num = 1; // 1 console.log(num); var num = 2; // 2 console.log(num);
這里要注意,JavaScript的變量提升是針對var的,而let和const不存在變量提升這一特性
// ReferenceError: a is not defined console.log(a); let a = 10;
一個復(fù)雜一點的例子
var a = 100; function fn() { // undefined console.log(a); var a = 200; // 200 console.log(a); } fn(); // 100 console.log(a); var a; // 100 console.log(a); // 300 var a = 300; console.log(a);
- JavaScript中變量提升與函數(shù)提升經(jīng)典實例分析
- 詳解javascript中的變量提升和函數(shù)提升
- javascript變量提升和閉包理解
- JS中作用域和變量提升(hoisting)的深入理解
- javascript中的變量作用域以及變量提升詳細介紹
- JavaScript中變量提升 Hoisting
- 深入理解Javascript作用域與變量提升
- 理解javascript中的嚴(yán)格模式
- 深入理解javascript嚴(yán)格模式(Strict Mode)
- Javascript的嚴(yán)格模式strict mode詳細介紹
- Javascript 嚴(yán)格模式use strict詳解
- JavaScript變量提升和嚴(yán)格模式實例分析
相關(guān)文章
簡單談?wù)凧avascript函數(shù)中的arguments
在JavaScript中,arguments對象是比較特別的一個對象,實際上是當(dāng)前函數(shù)的一個內(nèi)置屬性。下面這篇文章主要介紹了關(guān)于Javascript函數(shù)中的arguments面貌以及如何轉(zhuǎn)化為數(shù)組的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02JavaScript操作數(shù)組的常用方法總結(jié)
這篇文章總結(jié)了JavaScript操作數(shù)組的常用方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06Javascript入門學(xué)習(xí)資料收集整理篇
為大家更好的接觸和學(xué)習(xí)js資料,所以我轉(zhuǎn)了這篇文章,我大約的看了下,文章寫的非常不錯,希望大家不要急,慢慢看,第一次看不懂不要緊,多練習(xí)就可以了2008-07-07javascript cookie基礎(chǔ)應(yīng)用之記錄用戶名的方法
這篇文章主要介紹了javascript cookie基礎(chǔ)應(yīng)用之記錄用戶名的方法,涉及javascript基于cookie針對數(shù)據(jù)存儲的簡單應(yīng)用,需要的朋友可以參考下2016-09-09