a //referenceerror: a is not defined
b //1
for (let m = 0; m < 10; m++)
console.log(i);//報錯
for (var i = 0; i < 10; i++)
console.log(i);//這個i是全域性的,會輸出10
var a = ;
for (let i = 0; i < 10; i++) ;
}a[6](); // 6
//for迴圈的括號中是乙個父級作用域,花括號中是單獨的子作用域
for (let i = 0; i < 3; i++)
暫時性死區:如果區塊中存在let或const命令,這些區塊對這些命令宣告的變數,從一開始就形成了封閉作用域(temporal dead zone,簡稱tdz),凡是在宣告之前使用這些變數就會報錯
var temp = "aa";
if(true)
// var 的情況
console.log(foo); // 輸出undefined
var foo = 2;
// let 的情況
console.log(bar); // 報錯referenceerror
let bar = 2;
//報錯
function
func(args)
function
func(args)
function
func(args)
}
內層變數可能會覆蓋外層變數
var temp = 'abc'
;function func
()};
func
()//undefined
有了塊級作用域後,外層作用域無法讀取內層作用域中的變數,但內層作用域可以讀取外層作用域中的變數
塊級作用域的出現,實際上使得立即執行函式表示式不再必要
//iife寫法
(function
()());
//es6寫法
作用域與let相同,只在宣告所在的塊級作用域內有效;
變數也不提公升,存在暫時性死區; -本質:const實際上保證的,並不是變數的值不得改動,而是變數指向的那個記憶體位址不得改動。對於簡單型別的資料(數值、字串、布林值),值就儲存在變數指向的那個記憶體位址,因此等同於常量。但對於復合型別的資料(主要是物件和陣列),變數指向的記憶體位址,儲存的只是乙個指標,const只能保證這個指標是固定的,至於它指向的資料結構是不是可變的,就完全不能控制了。
const foo = {};
// 為 foo 新增乙個屬性,可以成功
foo.prop = 123;
foo.prop // 123
// 將 foo 指向另乙個物件,就會報錯
foo = {}; // typeerror: "foo" is read-only
//如果真的想將物件凍結,可以使用object.freeze方法
const foo = object.freeze({});
// 常規模式時,下面一行不起作用;
// 嚴格模式時,該行會報錯
foo.prop = 123;
//講物件的屬性也凍結
var constantize = (obj) =>
});};
ES6學習 let和const命令
1.let命令 所宣告的變數命令所在 塊有效 a referenceerror a is not defined.b 1for迴圈的計數器,就很適合let命令 for let i 0 i arr.length i console.log i referenceerror i is not defin...
ES6 一 let和const命令
在js中是沒有塊級作用域的,var 宣告的變數作用域是整個函式體,而let可以起到這一作用 console.log b 2 console.log a a is not defind 而let可以起到這一作用啊在js中變數和函式的宣告會提公升到當前作用域最頂部執行。這樣就會出現問題。var a 函式...
ES6(01 基礎 let和const命令)
宣告變數 6種方法 es5 2種 var命令和function命令 es6 新新增4種 let命令 const命令 import命令和class命令 let 命令 1.只在所在 塊中有效 2.不存在變數提公升 3.暫時性死區 4.不允許重複宣告 const 命令 定義 該命令宣告乙個唯讀的常量,一旦...