let和const命令總結

2021-08-15 17:56:34 字數 1875 閱讀 8042

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 命令 定義 該命令宣告乙個唯讀的常量,一旦...