本文目錄一覽:
- 1、JavaScript ES6中var,let,const分別什麼時候使用
- 2、var、let、const三者之間的區別和聯繫有哪些?
- 3、let和const的引入會對js編程帶來哪些改變
- 4、var、function、let、const變數提升
- 5、js const定義函數?
JavaScript ES6中var,let,const分別什麼時候使用
如果在條件循環語句里用var申明的變數在循環外也可以引用,let 則不行,希望變數是局部變數時使用let最好,var一不小心就申明了全局變數了,const用來聲明靜態變數的 ,變數值不會改變的變數
var、let、const三者之間的區別和聯繫有哪些?
var 是es5之前當然之後也可以這麼寫的寫法!
es5之後又細分出了let(變數)const(常量)這兩種類型。
但是const的出現也表示js腳本開始走向類如java,c#那種重型語言的編寫方式,明確細分了常量和變數。
然後let對比var都是變數(var沒有變數常量一說,但ES5之後其行為與let類似),但是,var和let有很大區別,簡單理解就是作用域變了,如果你學過後端語言的話,你會知道,使用變數需要先聲明在賦值後使用的流程,let繼承了這種流程,而var沒有,在代碼里的體現就是,let只在定義它的上一個大括弧內及其所有子方法體起作用,比如方法中定義let則出了這個方法就沒法使用到這個let,同級別的兩個方法,可以各自定義一個同名let變數。
其實說起來,你可能沒有感覺,因為你用var的時候可能也是這麼用的,但是let是被嚴格約束可以這麼用,而var其實是無約束的,在某些時候是亂竄。也就是你看到的是你想看的,但它裡面的運行不是你所想的!簡單來說,var的作用域是混亂的,同父子作用域下var可以被多次定義。而let不能!
const也是繼承了後端的常量思想,一旦定義,無法被修改,也不能被修改,也不應該被修改,如果你想改變以上3條中的任何一條,都不要使用const!所以const一般用於存儲固定不變的內容,比如系統信息里的名字啊,系統風格啊,審批號啊之類的,不是不能變,而是應該通過人為干預手寫的方式來改變其值,不能不應通過代碼的方式來賦值(初值除外)!
let和const的引入會對js編程帶來哪些改變
1. let 命令
① 在js中是沒有塊級作用域的,var 聲明的變數作用域是整個函數體,而let可以起到這一作用
{ let a = 1; var b = 2; } console.log(b); // 2 console.log(a); // a is not defind
② 而let可以起到這一作用啊在js中變數和函數的聲明會提升到當前作用域最頂部執行。這樣就會出現問題。
var a = []; //函數和變數i會最先進行聲明,同時全局變數i經過for循環賦值為10 for (var i = 0; i 10; i++) { a[i] = function () { console.log(i); }; } console.log(i);//10 a[6]();//10
而使用let就解決了這個問題
for (let i = 0; i 10; i++) { a[i] = function () { console.log(i); }; } a[6](); //6
③ let不像var那樣,會發生「變數提升」現象
console.log(a); // a is not defined let a = 1;
④ let不允許在相同塊級作用域內,重複聲明同一個變數
// 報錯 { let a = 10; var a = 1; } // 報錯 { let a = 10; let a = 1; }
2. const 命令
① const也用來聲明變數,但是聲明的是常量。一旦聲明,常量的值就不能改變。
② 與let相同也不能在相同塊級作用域內重複聲明同一個變數。
③ const的作用域與let命令相同:只在聲明所在的塊級作用域內有效。
const PI = 3.1415; console.log(PI); // 3.1415 //PI = 3; // Assignment to constant variable.(不能給常量賦值) //const PI = 3.1;// Identifier ‘PI’ has already been declared
var、function、let、const變數提升
我是從這兩篇文章的閱讀中,做出了自己的總結,如果不明白的話可以看看這兩篇文章:
變數提升情況:
變數提升概念:
js引擎在執行過程中變數的生命周期分為三個階段: 註冊、初始化、賦值
var、funciton、let、const的生命周期:
var 在註冊階段初始化是一起的,會被賦值為 undefined ,所以變數提升,列印出的是 undefined
function 在註冊階段初始化、執行都一起了,所以函數不管寫在哪裡都可以直接調用
let 在註冊階段和初始化是解耦的,只是創建了但是並未初始化,所以出現了暫時性死區,列印出的是 ‘x is not defined’
const 的生命周期與let一樣,只不過沒有賦值階段
js const定義函數?
const用來定義常量的,初始化之後不能修改,let定義變數的,初始化之後還可以被修改
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/195415.html