一、let塊做用域html
if(true){ var a=1; let b=2; } console.log("a:"+a);//a:1 console.log("b:"+b);//Uncaught ReferenceError: b is not defined
二、let經常使用於for循環es6
var a=[]; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); //6 //變量i是let聲明的,當前的i只在本輪循環有效。因此每一次循環的i其實都是一個新的變量,因而最後輸出的是6 }; } a[6]();
三、typeof再也不是一個百分之百安全的操做安全
console.log(typeof x);//undefined console.log(typeof y);//Uncaught ReferenceError: y is not defined var x=2; let y=3;
typeof運行時y還沒有聲明,因此報錯。babel
四、隱蔽的暫時性死區ide
//正確 function bar(x=2, y=x) { return [x, y]; } console.log(bar());//[2,2]
//報錯 function bar(x=y, y=2) { return [x, y]; } console.log(bar());//Uncaught ReferenceError: y is not defined
五、不容許重複聲明函數
不能在函數內重複聲明參數學習
function bar(arg) { let arg;//Uncaught SyntaxError: Identifier 'arg' has already been declared }
一、const聲明的變量也是塊做用域,可是不能被屢次修改es5
let a=10; const b=20; console.log(a); console.log(b); a=100; b=200;//Uncaught TypeError: Assignment to constant variable.
二、const 聲明變量時必須賦值spa
const a;//Uncaught SyntaxError: Missing initializer in const declaration
三、const能夠指定爲對象指針
const常亮指向對象的指針不能變,對象自己是能夠改變的
let user={name:"starof",age:25}; const LOVE_YOU=user; console.log(user); /*LOVE_YOU=1;//報錯*/ user.age=18; console.log(user);
下面代碼在es5中輸出inside,在es6中輸出outside。
若是肯定是在es5中仍是在es6中運行?能夠經過babel使其在es6中執行。
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="js/browser.js"></script> </head> <body> <script type="text/babel"> function f() { console.log("outside"); } (function () { if (true) { //重複 聲明f function f() { console.log("inside"); //babel解析爲es6因此輸出outside } } f(); }()) </script>
es6中規定:
var和function聲明的全局變量,依舊是全局對象的屬性。
let,const聲明的全局變量不屬於全局對象的屬性。
如下代碼輸出什麼結果?
let b=1; console.log(window.b++);//NaN
本文做者starof,因知識自己在變化,做者也在不斷學習成長,文章內容也不定時更新,爲避免誤導讀者,方便追根溯源,請諸位轉載註明出處:http://www.cnblogs.com/starof/p/6919624.html有問題歡迎與我討論,共同進步。