摘要:發(fā)布自的博客,歡迎大家轉(zhuǎn)載,但是要注意注明出處。另外,該文章收納在的個人的知識整理倉庫,歡迎投稿介紹變量提升是人們對執(zhí)行上下文工作方式的一種認(rèn)識,并不是官方給出的改變從字面上理解,變量提升的意思是變量和函數(shù)的聲明會在物理層移動到作用域的最前
發(fā)布自Kindem的博客,歡迎大家轉(zhuǎn)載,但是要注意注明出處。另外,該文章收納在Kindem的個人的 IT 知識整理倉庫,歡迎 Star、Fork、投稿介紹
變量提升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)用,但是這種方法仍然能夠運(yùn)行,這是因為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);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/97801.html
摘要:變量提升什么是變量提升在函數(shù)體內(nèi)聲明的變量,無論你是在函數(shù)的最底端還是中間聲明的,那么都會把該變量的聲明提升到函數(shù)的最頂端相當(dāng)于第一行,但是只是提升變量的聲明,不會賦值。 1、變量提升 什么是變量提升?在函數(shù)體內(nèi)聲明的變量,無論你是在函數(shù)的最底端還是中間聲明的,那么都會把該變量的聲明提升到函數(shù)的最頂端(相當(dāng)于第一行),但是只是提升變量的聲明,不會賦值。 var num = 10; fu...
摘要:不同的是函數(shù)體并不會再被提升至函數(shù)作用域頭部,而僅會被提升到塊級作用域頭部避免全局變量在計算機(jī)編程中,全局變量指的是在所有作用域中都能訪問的變量。 ES6 變量作用域與提升:變量的生命周期詳解從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語法基礎(chǔ)與實踐技巧系列文章。本文詳細(xì)討論了 JavaScript 中作用域、執(zhí)行上下文、不同作用域下變量提升與函數(shù)提升的表現(xiàn)、頂層對象以及如何避免創(chuàng)建...
摘要:輸出的結(jié)果為輸出的結(jié)果為提升后輸出的結(jié)果為重新定義了變量輸出的結(jié)果為如果定義了相同的函數(shù)變量聲明,后定義的聲明會覆蓋掉先前的聲明,看如下代碼輸出練習(xí)的值是多少的值是多少第二題的解析請看這里參考資料文章文章中文版鏈接文章推薦文章變量提升 JavaScript 變量聲明提升 原文鏈接 一個小例子 先來看個例子: console.log(a); // undefined var a =...
摘要:變量提升需要注意兩點提升的部分只是變量聲明,賦值語句和可執(zhí)行的代碼邏輯還保持在原地不動提升只是將變量聲明提升到變量所在的變量范圍的頂端,并不是提升到全局范圍,說明如下會輸出變量提升之后的效果函數(shù)聲明會提升,但是函數(shù)表達(dá)式就不了。 問題 有些朋友可能會覺得javascript的代碼是從上到下,一行一行的解釋執(zhí)行的。如果按照這樣的思路,在有些情況下閱讀代碼會得到錯誤的結(jié)果,考慮以下代碼: ...
摘要:但是碰到聲明提升,這種想法就會被打破。聲明一個函數(shù)進(jìn)行相應(yīng)的操作,會得到函數(shù)聲明提升的結(jié)果。由此可以發(fā)現(xiàn)變量和函數(shù)的聲明都會被提升在其他代碼的前面執(zhí)行。一個普通塊內(nèi)部的函數(shù)聲明通常會被提升到所在的作用域的頂部。的創(chuàng)建初始化和賦值均會被提升。 Javascript聲明提升 在分析聲明提升之前,我認(rèn)為有必要知道的兩點: 一、引擎查詢變量的兩種方式 引擎查詢變量的方式可以分為LHS和RHS兩...
閱讀 1344·2023-04-26 00:35
閱讀 2716·2023-04-25 18:32
閱讀 3344·2021-11-24 11:14
閱讀 770·2021-11-22 15:24
閱讀 1418·2021-11-18 10:07
閱讀 6466·2021-09-22 10:57
閱讀 2774·2021-09-07 09:58
閱讀 3565·2019-08-30 15:54