(1)es6中新增的let關鍵字
之前我們宣告乙個變數時,都是使用關鍵字var,那新增加的let和var有什麼不同呢?
var的不足之處一:
var arr=;
for (vari=0;i<10;i++); }
arr[8](); // console.log(i); 的結果為 10
同樣的換成 let之後就沒問題:
var arr=;
for (leti=0;i<10;i++);
} arr[8](); // console.log(i); 的結果為 8
這是由於,本來的js是沒有塊級作用域的,用var定義i時,雖然在for迴圈中定義,但在執行時,依然會被提公升。當執行arr[8]()時,迴圈已經完成,這時的i=10;所以再去執行 arr[8]()時,console.log(i),i=10;
而是用let定義i,i就只能存在與for迴圈的塊級作用域,不會被提公升。
(塊,只的是 一組{}之間的部分。)
var的不足之處二:
也就是變數提公升。var 會被提公升定義;let不會。
var a=1;
(function())(); //undefined 表示只宣告,為賦值;
同樣的換做let之後:
var a=1;
(function())(); //報錯: uncaught referenceerror: a is not defined(…)
這是因為,用let定義後,變數a的定義不會被提公升。且在塊級作用域內封閉,不會受到外界a的影響。在使用a(alert(a))時,a尚未定義,所以報錯。因此,在使用let時,一定注意,變數要先宣告後使用。
使用let時注意:
注意一: 在同一塊級作用域下,不能重複宣告同乙個變數。
//報錯
//報錯
注意二:在函式內,不能用let重新宣告函式的引數。
function say(word)
say('hi'); //報錯
(2)es6中新增的const關鍵字
const是常量(contsant)的縮寫,與let相比,const專門用來宣告乙個常量。
特點:const name='a';
name='b'; //報錯
if(1)
alert(name); //報錯
if(1)
var name='a';
const name='b'; //報錯
const name; //報錯
注意:當常量為乙個物件時:
const person=;
person.name='b';
person.age='13';
console.log(person) // ; 輸出正常。
這是由於const宣告了乙個引用型別的常量,使用的是傳址賦值。也就是不修改位址,只修改位址中的值。
ES6新增關鍵字
let 關鍵字特點塊級作用域 if語句和for語句之類的大括號會隔離作用域if true console.log a 10 console.log b 報錯 referenceerror b is not definedconsole.log a 因為有變數宣告的提公升所以會輸出 undefined...
es6之let,const關鍵字
在es5中沒有塊級作用域,只有函式作用域和全域性作用域,例如不能成為乙個作用域,但在es6中可以 for var i 0 i 4 i console.log i i 4這是因為i是在全域性的,最後列印的是for迴圈裡面最後的結果。用let替換var則結果為not defined。for let i ...
ES6 之關鍵字 let
正如大家都熟悉的,我們平時在寫 的時候,用var 宣告乙個變數,除此之外,也再沒有接觸到其它的關鍵字了,不管我們宣告什麼樣型別得變數,都用var 搞定了,很方便,但是es6 告訴你,除了var,還可以試試 let 來宣告變數。那麼,既然var 方便,為什麼還要let 來宣告,這麼說 var 宣告 一...