1. 程式人生 > >var、let、const的區別,已經作用範圍。

var、let、const的區別,已經作用範圍。

color fig efi 一個 註意 blog 問題 輸出 立即執行

在es5中一般經常使用的變量有兩個級別,一個是用var聲明的全局級別的變量,另外一個是函數級別是用var生命在函數內的。本文中將詳細講解我對es6中的const和let的區別。

let的使用以及作用範圍

let是塊級變量,只有在自己聲明的內部才會有作用。

‘use strict‘;
{
    var a = 12;
    let b = 15;
    {
        console.log(a, b)//12 15沒有問題的。
    }
}
console.log(a,b)  //12  defined     a是全局變量在哪裏輸出都沒有問題,然而b是塊級變量所以只有在聲明b的內部才會有效。

let的提升。下列代碼中證明了let沒有被提升 var 被提升了。

‘use strict‘;
function fun() {
    // var a   相當於a提升到了這裏定義了,但是未賦值。
    console.log(a, b); //undefined defined  註意a是沒有被復制,而b是未定義,這說明a是向上提升了而b卻沒有提升。
    // a = 12; a相當於在這裏賦值了、
    var a =  12;
    let b = ‘b‘;
}
fun();

let的提升以及作用範圍。

‘use strict‘;
var a = 12;
function f() {
    console.log(a); 
//defined 因為在函數外部聲明了a,然後在函數內部又聲明了a,此時函數外部的a就會失效,但是函數內部的a又沒有提升的功能所以會輸出未定義; let a = 100; } f();

使用let代替匿名函數立即執行

‘use strict‘;
(function () {
    var config = [];
    config.push(1);
    config.push(2);
    config.push(3);
    console.log(config) //1, 2, 3
})();
let configs;
{
    configs = [];
    configs.push(
4); configs.push(5); configs.push(6); console.log(configs) //4, 5, 6 }

const的使用

const是常數顧名思義,就是聲明後無法修改的。請看下面的例子。

const的提升和作用範圍和let幾乎一樣,在這裏就不做過多的例了。

‘use strict‘;
const a = {
    name: ‘鉛筆‘
};
a = 100; //此時會報錯

常量不代表所以得東西不能修改,除了a = 這個指向不能修改 a對象內部的屬性和值都是可以修改的。

‘use strict‘;
const a = {
    name: ‘鉛筆‘
};
a.name = ‘黑白‘;
a.email = [email protected];
console.log(a); // {name : ‘黑白, email : [email protected]}

怎麽讓a和內部的東西不能修改呢?

‘use strict‘;
const a = {
    name: ‘鉛筆‘
};
Object.freeze(a);  //a內部的所有屬性和值都不能修改了。
a.name = ‘黑白‘;   // 報錯
a.email = [email protected]; // 報錯
console.log(a); // {name : ‘黑白, email : [email protected]}

var、let、const的區別,已經作用範圍。