在js中,可以使用var、let和const關鍵字宣告。 var宣告的變數可以用來保存任何類型的值,範圍是函數作用域;let宣告的變數在{}中使用,變數的作用域限制在區塊級域中;const用於修飾常數,宣告位置不限。
本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
聲明變數關鍵字var、let和const
ECMAScript變數是鬆散類型的,即變數可以用於保存任何類型的數據,每個變數只不過是一個用於保存任意值的命名佔位符。
1.var關鍵字
var宣告的變數可以用來保存任何類型的值(在不初始化的情況下會保存一個特殊值undefined),像其他語言一樣在javascript在定義變數的同時還可以對變數進行賦值,該變數被定義為保存所賦值的值的變量,因為javascript是動態語言,在初始化變數的時候不會將它標識為所賦值的資料類型,只是一個簡單的賦值而已。隨後不僅可以改變已儲存的值,還可以改變值的類型:
var message = "hi"; message = 100;
1.1.var宣告作用域
使用var運算子定義的變數會成為包含它的函數的局部變量。例如,使用var在函數內部定義一個變量,就意味著這該變量將在函數退出時被銷毀,我覺得這就是所說的垃圾回收:
function test( ) { vart message = "hi"; //局部变量 } test( ); console.log(message); //报错!
函數調用之後變量會隨機被銷毀,因此最後一行會報錯。不過,在函數定義變數時省略var運算子時可以建立一個全域變數:
function test( ) { message = "hi"; //全局变量 } test( ); console.log(message); //"hi"
只要呼叫一次函數test( )就會定義message這一全域變量,並且可以在函數外部存取。但是由於在局部作用域中定義的全域變數很難維護,所以一般不建議這樣做。
1.2.var宣告提升
使用var關鍵字宣告的變數會自動提升函數作用域頂部,即所謂的「提升」(hoist),也就是把所有變數宣告都拉到函數作用域的頂端:
function fool( ) { console.log(age); var age = 28; } fool( ); //undefined
這裡是不會報錯的,而是顯示undefined,ECMAScript在運作是會把它看成等價於如下的程式碼:
function fool( ) { var age; console.log(age); age = 28; } fool( ); //undefined
2 .let聲明
let跟var的作用差不多,但有著非常重要的差異。最明顯的差異在於let宣告的範圍是區塊作用域,而var宣告的範圍是函數作用域:
if (true) { let age = 26; console.log(age); //26 } console.log(age); //ReferceError:age没有定义
age變數的作用域僅限於該區塊內部,所以不能在if區塊外部被引用。塊作用域是函數作用域的子集,所以適用於var的作用域限制也同樣適用於let。
let也不允許在同一塊作用域中出現冗餘宣告(var可以):
var name; var name; let age; let age; //SyntaxError;标识符age已经声明过了
另外,對宣告冗餘封包不會因混用var和let而受影響。這兩個關鍵字聲明的並不是不同類型的變量,他們只是指出變數在相關作用域如何存在。
2.1.暫時性死區
let與var的另一個重要差異是let宣告的變數不會在作用域中被提升:
//name会提升 console.log(name); //undefined var name = 'matt'; //name不会提升 console.log(name); //ReferenceError:name没有定义 let name = 'matt';
2.2.全域宣告
與var不同,使用let在全域作用域中宣告的變數不會成為window物件的屬性(var宣告的變數則會):
var name = 'matt'; console.log(window.name); //'matt' let name = 'matt'; console.log(window.name); //undefined
不過,let宣告仍然是在全域作用域中發生的,對應變數會在頁面的宣告週期記憶體續。
2.3.條件宣告
let的作用域是區塊,所以不可能檢查前面是否已經使用let宣告過同名變量,同時也就不可能在沒有宣告的情況下宣告它。使用try/catch或typeof運算子也不能解決,因為條件區塊中let宣告的作用域僅限於該區塊。為此,對於let這個新的ES6聲明關鍵字不能依賴條件聲明模式。
2.4.for迴圈中的let宣告
在使用var的時候,最常見的問題就是迭代變數的奇特宣告與修改:
for(var i = 0; i < 5; ++i) { setTimeout( () => console.log(i) ,0) } //你可能以为会输出0、1、2、3、4 //实际上输出的是5、5、5、5、5
在退出循環的時候迭代變數保存的是導致循環退出的值:5。之後執行setTimeout逾時邏輯時,所以i都是同一個變量,因而最終輸出的都是同一個值。
使用let宣告迭代變數時,JavaScript引擎在後台會為每個迭代循環宣告一個新的迭代變量,每個setTimeout所引用的都是不同的變數實例:
for(let i = 0; i < 5; ++i) { setTimeout( () => console.log(i) ,0) } //会输出0、1、2、3、4
3 .const宣告
const的行為基本上與let相同,唯一重要差異在於它宣告變數時必須同時初始化變量,且嘗試修改const宣告的變數會導致運算錯誤。
const声明的限制只适用于它指向的变量的引用。如果const变量引用的是一个对象,那么修改这个对象内部的属性并不违反const的限制:
const person = { }; person.name = 'matt';
4.使用建议
let和const是ES6中新增的,从客观上为JavaScript更精确地声明作用域和语义提供更好的支持。
4.1.不使用var
限制自己只使用let和const有助于提升代码质量,因为变量有了明确的作用域、声明位置,以及不变的值。
4.2.const优先,let次之
使用const声明可以让浏览器运行时强制保持变量不变,也可以让静态代码分析工具提前发现不合法的赋值操作。因此,我们应该优先使用const来声明变量,只有在提前知道未来会有修改时再使用let。
【推荐学习:javascript高级教程】
以上是javascript用哪個關鍵字宣告變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版