ES6心得體會(一)之let和const命令

2021-09-23 10:25:14 字數 1758 閱讀 7756

一、let和const命令

1.1不存在變數提公升和暫時性死區(tdz)

//tdz開始

tmp = 'abc' //referenceerror

console.log(tmp) //referenceerror

let tmp; //tdz結束

console.log(tmp) //undefined

tmp = 123;

console.log(tmp) //123

暫時性死區意味著type of不再是百分之百安全

typeof x; //referenceerror

let x;

1.2隱蔽死區
function bar (x=y,y=2)

bar() //referenceerror

1.3塊級作用域

1.3.1 第一種場景,內層變數可能會覆蓋外層變數

var tmp = new date();

function f()

}f(); // undefined

if**塊的外部使用外層的tmp變數,內部使用內層的tmp變數。

但是,函式f執行後,輸出結果為undefined,原因在於變數提公升,

導致內層的tmp變數覆蓋了外層的tmp變數。

1.3.2 第二種場景,用來計數的迴圈變數洩露為全域性變數

var s = 'hello';

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

console.log(i); // 5

變數i只用來控制迴圈,但是迴圈結束後,它並沒有消失,洩露成了全域性變數。

1.3.3 塊級作用域必須有大括號

// 第一種寫法,報錯

if (true) let x = 1;

// 第二種寫法,不報錯

if (true)

// 不報錯

'use strict';

if (true)

}// 報錯

'use strict';

if (true)

function f() {}

1.4 const

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

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

const foo = object.freeze({});

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

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

foo.prop = 123;

1.5頂層物件的屬性

頂層物件,在瀏覽器環境指的是window物件,在 node 指的是global物件。es5 之中,頂層物件的屬性與全域性變數是等價的。

es6 為了改變這一點,一方面規定,為了保持相容性,var命令和function命令宣告的全域性變數,依舊是頂層物件的屬性;另一方面規定,let命令、const命令、class命令宣告的全域性變數,不屬於頂層物件的屬性。也就是說,從 es6 開始,全域性變數將逐步與頂層物件的屬性脫鉤。

var a = 1;

// 如果在 node 的 repl 環境,可以寫成 global.a

// 或者採用通用方法,寫成 this.a

window.a // 1

let b = 1;

window.b // undefined

ES6 一 let和const命令

在js中是沒有塊級作用域的,var 宣告的變數作用域是整個函式體,而let可以起到這一作用 console.log b 2 console.log a a is not defind 而let可以起到這一作用啊在js中變數和函式的宣告會提公升到當前作用域最頂部執行。這樣就會出現問題。var a 函式...

ES6學習筆記之《let 和 const》

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

ES6之let和const命令(筆記)

1 let命令 console.log a undefined console.log b 112 const命令 3 設定跨模組常量模組 export consta 1 import as constant from constants console.log constant.a import ...