for(var i = 0; i < 10; i++){}
console.log(i); //10
for(let j = 0; j < 10; j++){}
console.log(j); //"referenceerror: j is not defined
疑問:
console.log(a); // 輸出undefined
console.log(b); // 報錯referenceerror
console.log(c); // 報錯referenceerror
var a = 2;
let b = 2;
注意區別undefined
和referenceerror
只要進入當前塊級作用域,所使用的變數已經存在了,但在宣告之前都屬於死區,不可進行操作。注意:
typeof
不再是100%安全的操作
typeof x; // referenceerror
typeof y // undefined
let x;
let x = 1;
let x; // "syntaxerror: identifier 'x' has already been declared
var y = 2;
var y = 3; // y = 3
// 匿名函式寫法
(function () ());
// 塊級作用域寫法
es5的嚴格模式規定,函式只能在頂層作用域和函式內宣告,其他情況(比如if**塊、迴圈**塊)的宣告都會報錯。
// es5
'use strict';
if (true) // 報錯
}
es6由於引入了塊級作用域,這種情況可以理解成函式在塊級作用域內宣告,因此不報錯,但是構成區塊的大括號不能少
// 報錯
'use strict';
if (true)
function f() {}
"use strict";
var a = 1;
console.log(window.a) // 1
let b = 1;
console.log(window.b) // undefined
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
學習資料 ecmascript 6 入門 如果使用var,只有乙個全域性變數i var a for var i 0 i 10 i a 6 10var a for let i 0 i 10 i a 6 6設定迴圈變數的那部分是乙個父作用域,而迴圈體內部是乙個單獨的子作用域 for let i 0 i ...