天天看點

Javascript let和const

Javascript let和const

在 ES6 之前,JavaScript 隻有兩種作用域:

全局變量 : 在函數外聲明的變量作用域是全局的

局部變量(函數變量):在函數内聲明的變量作用域是局部的

<script type="text/javascript">
		var a = "aaa";
		console.log(a) // aaa
		function myFunction() {
			var b = "bbb";
			console.log(a) // aaa
			console.log(b) // bbb
		    // 這裡也可以使用 carName 變量
		}
		console.log(b) // 報錯
	</script>
           

塊級作用域:

1) 塊級作用域不影響var聲明的變量。使用 var 關鍵字聲明的變量不具備塊級作用域的特性,它在 {} 外依然能被通路到。

{ 
	var x = 2; 
}
console.log(x) // 2

let i = 5;
for (let i = 0; i < 10; i++) {
    // 一些代碼...
}
console.log(i); //  5
           

2)let

a) 聲明的變量隻在所處于的塊級有效

b) let沒有‘變量提升’的特性,而是‘暫時性死區(temporal dead zone)’特性。

function func(args){
    if(true){
        console.log(i); // Cannot access 'i' before initialization
        let i = 6;
        console.log(i); // 6
    }
    console.log(i); // i is not defined
};
func();
           

一個經典例子:

var arr = [];
for(var i = 0; i < 2; i++){
    arr[i] = function(){
        console.log(i);
    };
};
arr[0](); // 2
arr[1](); // 2
           
'use strict';
var arr = [];
for(let i = 0; i < 2; i++){
    arr[i] = function(){
        console.log(i);
    };
};
arr[0](); // 0
arr[1](); // 1
           

3) const

a) 聲明的變量隻在所處于的塊級有效

b) const是用來聲明恒定變量的,聲明的同時就必須指派,否則會報錯。

const 定義的變量并非常量,并非不可變,它定義了一個常量引用一個值。使用 const 定義的對象或者數組,其實是可變的。
// 建立常量對象
const car = {type:"Fiat", model:"500", color:"white"};
// 修改屬性:
car.color = "red";
// 添加屬性
car.owner = "Johnson";

不能對常量對象重新指派:
const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"};    // 錯誤
           

繼續閱讀