ES6 學習筆記 let和const

2022-08-18 00:51:14 字數 2640 閱讀 6737

學習資料:ecmascript 6 入門

如果使用var,只有乙個全域性變數i:

var a = ;

for (var i = 0; i < 10; i++) ;

}a[6](); // 10

var a = ;

for (let i = 0; i < 10; i++) ;

}a[6](); // 6

設定迴圈變數的那部分是乙個父作用域,而迴圈體內部是乙個單獨的子作用域:

for (let i = 0; i < 3; i++) 

// abc

// abc

// abc

let所宣告的變數一定要在宣告後使用:

// var 的情況

console.log(foo); // 輸出undefined

var foo = 2;

// let 的情況

console.log(bar); // 報錯referenceerror

let bar = 2;

只要塊級作用域內存在let命令,它所宣告的變數就「繫結」(binding)這個區域,不再受外部的影響。所以需要先宣告再使用:

var tmp = 123;

if (true)

if (true)

隱蔽的死區:

function bar(x = y, y = 2) 

bar(); // 報錯

let不允許在相同作用域內,重複宣告同乙個變數。

// 報錯

function func()

// 報錯

function func()

function func(arg)

function func(arg)

}

es5中沒有塊級作用域,內層變數可能會覆蓋外層變數:

var tmp = new date();

function f()

}f(); // undefined

es5中沒有塊級作用域,用來計數的迴圈變數洩露為全域性變數:

var s = 'hello';

for (var i = 0; i < s.length; i++)

console.log(i); // 5

es6 規定,塊級作用域之中,函式宣告語句的行為類似於let,在塊級作用域之外不可引用。但在瀏覽器的 es6 環境中,塊級作用域內宣告的函式,行為類似於var宣告的變數。

// 瀏覽器的 es6 環境

function f()

(function ()

}f();

}());

// uncaught typeerror: f is not a function

考慮到環境導致的行為差異太大,應該避免在塊級作用域內宣告函式。如果確實需要,也應該寫成函式表示式,而不是函式宣告語句。

// 函式宣告語句

}// 函式表示式

;}

es6 的塊級作用域允許宣告函式的規則,只在使用大括號的情況下成立,如果沒有使用大括號,就會報錯。

// 不報錯

'use strict';

if (true)

}// 報錯

'use strict';

if (true)

function f() {}

const宣告乙個唯讀的常量。一旦宣告,常量的值就不能改變。

const一旦宣告變數,就必須立即初始化,不能留到以後賦值。

與let類似,只在宣告所在的塊級作用域內有效。宣告的常量也是不提公升,同樣存在暫時性死區,只能在宣告的位置後面使用。不可重複宣告。

const實際上保證的,並不是變數的值不得改動,而是變數指向的那個記憶體位址不得改動。

如果真的想將物件凍結,應該使用object.freeze方法。

const foo = object.freeze({});

// 常規模式時,下面一行不起作用;

// 嚴格模式時,該行會報錯

foo.prop = 123;

除了將物件本身凍結,物件的屬性也應該凍結。下面是乙個將物件徹底凍結的函式。

var constantize = (obj) => 

});};

var命令和function命令宣告的全域性變數,依舊是頂層物件的屬性;另一方面規定,let命令、const命令、class命令宣告的全域性變數,不屬於頂層物件的屬性。

墊片庫system.global可以在所有環境拿到global。

// commonjs 的寫法

var global = require('system.global')();

// es6 模組的寫法

import getglobal from 'system.global';

const global = getglobal();

es6學習筆記 let和const

console.log b uncaught referenceerror a is not defined 在for迴圈中,迴圈語句部分是乙個作用域,內部又是乙個作用域 for let a 1 a 3 a 在let宣告變數完成前,對變數賦值會出錯es中模仿塊級作用域 function functi...

ES6學習筆記 let和const

今天開始讀阮一峰的 ecmascript 6 入門 在這裡記錄下閱讀過程中的要點,以便隨時查閱。頂層物件的屬性與全域性變數掛鉤,被認為是js最大的敗筆之一,es6開始,全域性變數將逐步與頂層物件脫鉤。為了保持相容性,一方面,var和function宣告的全域性變數,依舊是頂層物件的屬性 另一方面,l...

ES6學習筆記之《let 和 const》

es6宣告變數的方法 var function let const import class let和 const const的作用域與let命令相同 只在宣告所在的塊級作用域內有效。if true max uncaught referenceerror max is not defined con...