var聲明變量的作用域限制在其聲明位置的上下文中
var x = 0; // x是全局變量,并且賦值為0。
console.log(typeof z); // undefined,因為z還不存在。
function a() { // 當a被調用時,
var y = 2; // y被聲明成函數a作用域的變量,然后賦值成2。
console.log(x, y); // 0 2
function b() { // 當b被調用時,
x = 3; // 全局變量x被賦值為3,不生成全局變量。
y = 4; // 已存在的外部函數的y變量被賦值為4,不生成新的全局變量。
z = 5; // 創建新的全局變量z,并且給z賦值為5。
} // (在嚴格模式下(strict mode)拋出ReferenceError)
b(); // 調用b時創建了全局變量z。
console.log(x, y, z); // 3 4 5
}
a(); // 調用a時同時調用了b。
console.log(x, z); // 3 5
console.log(typeof y); // undefined,因為y是a函數的本地(local)變量。
let 聲明的變量只在其聲明的塊或子塊中可用,var的作用域是整個封閉函數
function varTest() {
var x = 1;
if (true) {
var x = 2; // 同樣的變量!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // 不同的變量
console.log(x); // 2
}
console.log(x); // 1
}
在 ECMAScript 2015 中,let綁定不受變量提升的約束,這意味著let聲明不會被提升到當前執行上下文的頂部。
在塊中的變量初始化之前,引用它將會導致 ReferenceError(而使用 var 聲明變量則恰恰相反,該變量的值是 undefined )
當在塊中使用時,let將變量的作用域限制為該塊。注意var的作用域在它被聲明的函數內的區
var a = 1;
var b = 2;
if (a === 1) {
var a = 11; // the scope is global
let b = 22; // the scope is inside the if-block
console.log(a); // 11
console.log(b); // 22
}
console.log(a); // 11
console.log(b); // 2
const 常量必須在聲明的同時指定它的值.
const聲明創建一個值的只讀引用。但這并不意味著它所持有的值是不可變的(如引用內容是對象),只是變量標識符不能重新分配一個常量不能和它所在作用域內的其他變量或函數擁有相同的名稱
// 注意: 常量在聲明的時候可以使用大小寫,但通常情況下全部用大寫字母。
// 定義常量MY_FAV并賦值7
const MY_FAV = 7;
// 報錯
MY_FAV = 20;
// 輸出 7
console.log("my favorite number is: " + MY_FAV);
// 嘗試重新聲明會報錯
const MY_FAV = 20;
// MY_FAV 保留給上面的常量,這個操作會失敗
var MY_FAV = 20;
// 也會報錯
let MY_FAV = 20;
// 注意塊范圍的性質很重要
if (MY_FAV === 7) {
// 沒問題,并且創建了一個塊作用域變量 MY_FAV
// (works equally well with let to declare a block scoped non const variable)
let MY_FAV = 20;
// MY_FAV 現在為 20
console.log('my favorite number is ' + MY_FAV);
// 這被提升到全局上下文并引發錯誤
var MY_FAV = 20;
}
// MY_FAV 依舊為7
console.log("my favorite number is " + MY_FAV);
// 常量要求一個初始值
const FOO; // SyntaxError: missing = in const declaration
// 常量可以定義成對象
const MY_OBJECT = {"key": "value"};
// 重寫對象和上面一樣會失敗
MY_OBJECT = {"OTHER_KEY": "value"};
// 對象屬性并不在保護的范圍內,下面這個聲明會成功執行
MY_OBJECT.key = "otherValue";
// 也可以用來定義數組
const MY_ARRAY = [];
// It's possible to push items into the array
// 可以向數組填充數據
MY_ARRAY.push('A'); // ["A"]
// 但是,將一個新數組賦給變量會引發錯誤
MY_ARRAY = ['B']
下面介紹下在javascript中有三種聲明變量的方式:var、let、const。
var 聲明全局變量,換句話理解就是,聲明在for循環中的變量,跳出for循環同樣可以使用。
for(var i=0;i<=1000;i++){
var sum=0;
sum+=i;
}
alert(sum);
聲明在for循環內部的sum,跳出for循環一樣可以使用,不會報錯正常彈出結果
let:聲明塊級變量,即局部變量。
在上面的例子中,跳出for循環,再使用sum變量就會報錯,有著嚴格的作用域,變量只作用域當前隸屬的代碼塊,不可重復定義同一個變量,不可在聲明之前調用,必須先定義再使用,會報錯,循環體中可以用let
注意:必須聲明'use strict';后才能使用let聲明變量否則瀏覽并不能顯示結果,
const:用于聲明常量,也具有塊級作用域 ,也可聲明塊級。
const PI=3.14;
它和let一樣,也不能重復定義同一個變量,const一旦定義,無法修改。
總結
以上所述是小編給大家介紹的JavaScript變量聲明var,let.const及區別淺析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。