摘要:一新增了命令和一樣都是用來聲明標量,但所聲明的變量只在聲明的代碼塊內(nèi)及聲明之后有效命令適合在循環(huán)中使用在循環(huán)內(nèi)有效在全局內(nèi)有效命令暫時性死區(qū)大括號中的使用了聲明,所以在大括號中暫時只能在聲明之后有效不允許在同一作用域內(nèi)重復(fù)聲明變量,因此不能
一、ES6新增了let命令
let 和 var 一樣都是用來聲明標量,但let所聲明的變量只在【聲明的代碼塊內(nèi)】及【聲明之后】有效
{ console.log(a); // undefined console.log(b); // Uncaught ReferenceError: b is not defined(…) var a = 5; let b = 10; } console.log(a); // 5 console.log(b); // Uncaught ReferenceError: b is not defined(…)
let命令適合在for循環(huán)中使用
// i在for循環(huán)內(nèi)有效 for(let i = 0;i < 5;i++){ console.log(i); // 0 1 2 3 4 } console.log(i); // Uncaught ReferenceError: i is not defined(…) //i在全局內(nèi)有效 for(var i = 0;i < 5;i++){ console.log(i); // 0 1 2 3 4 } console.log(i); // 5
let 命令暫時性死區(qū)
// 大括號中的a使用了let聲明,所以 a在大括號中暫時只能在聲明之后有效 var a = 5; { console.log(a); // Uncaught ReferenceError: a is not defined(…) typeof a; // Uncaught ReferenceError: a is not defined(…) let a =10; console.log(a); // 10 } console.log(a); // 5
let不允許在同一作用域內(nèi)重復(fù)聲明變量,因此不能在函數(shù)內(nèi)重新聲明變量
{ let a = 10; var a = 15; //Uncaught SyntaxError: Identifier "a" has already been declared } { var a = 10; var a = 15; // 不會報錯 console.log(a); // 15 } show(10); function show(arg){ let arg = 5; //Uncaught SyntaxError: Identifier "arg" has already been declared(…) console.log(arg); } hide(10); function hide(arg){ { let arg = 5; console.log(arg); // 5 } console.log(arg); // 10 }
二、ES6新增了塊級作用域
ES5只有全局作用域和函數(shù)作用域,會出現(xiàn)以下的問題
//1、內(nèi)層變量覆蓋了外層變量 var number = 5; show(); function show(){ console.log(number); // undefined var number = 10 ; } //2、i泄露成全局變量 var string = "hello"; for(var i = 0 ;iES6塊級作用域?qū)懛ǎ▔K級作用域可以無限嵌套,可以代替ES5的匿名函數(shù)IIFE)
{ let number = 5; console.log(number); // 5 { let number = "hello"; console.log(number); // hello } }ES5嚴格模式下,函數(shù)不能在塊級中聲明,ES6明確規(guī)定可以在塊級作用域中聲明函數(shù),但聲明的函數(shù)有點類似let,在塊級作用域之外不可引用,由于瀏覽器可以忽略以上規(guī)則,所以盡量避免在塊級作用域中聲明函數(shù)。
//ES5非嚴格模式 if(true){ function show(){ //不報錯 }; } //ES5嚴格模式 "use strict"; if(true){ function show(){ //直接報錯 }; } //ES6嚴格模式 "use strict"; if(true){ function show(){ //不報錯 }; }三、ES6新增了const命令
const 聲明的是一個只讀的變量,一旦聲明,不可更改,這就意味著一旦聲明就必須初始化,不然會報錯,const作用域和let作用域一樣.
const PI; //Uncaught SyntaxError: Missing initializer in const declaration const PI = 3.1415926; console.log(PI); // 3.1415926; PI = 4 ; // Uncaught TypeError: Assignment to constant variable. //const聲明的變量也和let一樣,不能重復(fù)聲明 var a = 1; let b = 2; const a = 5; //Uncaught SyntaxError: Identifier "a" has already been declared const b = 6 ; //Uncaught SyntaxError: Identifier "b" has already been declared //對于復(fù)合對象,變量名指向的是數(shù)據(jù)的地址,const聲明的指向的是數(shù)據(jù)的地址不變,但數(shù)據(jù)可以變;若要凍結(jié)數(shù)據(jù),可以使用freeze. const A = {}; A.props = 123; console.log(A.props); // 123 A = {}; // Uncaught TypeError: Assignment to constant variable. const B = Object.freeze({}); B.props = 456; // 常規(guī)模式,該行代碼無效,嚴格模式下會報錯 console.log(B.props); // undefined全局變量的屬性
window.a = 1; var a = 2 ; console.log(a); // 2 console.log(window.a); // 2 window.b = 1; let b = 2 ; console.log(b); // 2 console.log(window.b); // 1總結(jié):
ES5 有兩種聲明變量的方法:var 和 function命令 ES6 有六種聲明變量的方法:var 、 function 、let 、const 、import、class命令。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80810.html
摘要:對比常量聲明與聲明常量聲明與聲明,都是塊級聲明。最后一點全局塊級綁定與不同于的另一個方面是在全局作用域上的表現(xiàn)。塊級綁定新的最佳實踐在的發(fā)展階段,被廣泛認可的變量聲明方式是默認情況下應(yīng)當(dāng)使用而不是。總結(jié)與塊級綁定將詞法作用域引入。 var變量與變量提升 使用var關(guān)鍵字聲明的變量,無論其實際聲明位置在何處,都會被視為聲明于所在函數(shù)的頂部(如果聲明不在任意函數(shù)內(nèi),則被視為在全局作用域的頂...
摘要:考慮到環(huán)境導(dǎo)致的行為差異太大,應(yīng)該避免在塊級作用域內(nèi)聲明函數(shù)。函數(shù)聲明語句函數(shù)表達式循環(huán)循環(huán)還有一個特別之處,就是循環(huán)語句部分是一個父作用域,而循環(huán)體內(nèi)部是一個單獨的子作用域。聲明一個只讀的常量。 es6學(xué)習(xí)筆記-let,const和塊級作用域_v1.0 塊級作用域 javascript 原來是沒有塊級作用域的,只有全局作用域和函數(shù)作用域 例子1 因為沒有塊級作用域,所以每次的i都是一...
摘要:外層作用域不報錯正常輸出塊級作用域與函數(shù)聲明規(guī)定,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明,不能在塊級作用域聲明。規(guī)定,塊級作用域之中,函數(shù)聲明語句的行為類似于,在塊級作用域之外不可引用。同時,函數(shù)聲明還會提升到所在的塊級作用域的頭部。 前言:最近開始看阮一峰老師的《ECMAScript 6 入門》(以下簡稱原...
摘要:入門一前言由于最近本人在學(xué)習(xí),做一些筆記能夠更好的熟悉,就趁此機會來寫一篇關(guān)于的新人學(xué)習(xí)摘要吧。的作用域與命令相同只在聲明所在的塊級作用域內(nèi)有效。塊級作用域新增方式和實際上為新增了塊級作用域。同時,函數(shù)聲明還會提升到所在的塊級作用域的頭部。 ECMAScript6/ES6 入門 一、前言 由于最近本人在學(xué)習(xí)ES6,做一些筆記能夠更好的熟悉,就趁此機會來寫一篇關(guān)于ES6的新人學(xué)習(xí)摘要吧。...
摘要:聲明的變量只在其所在的代碼塊內(nèi)有效。只要在聲明之前使用這些變量,就會報錯。在語法上稱為暫時性死區(qū)有時候,會不經(jīng)間遇到比較隱蔽的死區(qū),不太容易被發(fā)現(xiàn)。不允許重復(fù)聲明不允許在相同的作用域內(nèi)聲明同一個變量。一旦聲明,其值就不能再改變。 let && const let let聲明的變量只在其所在的代碼塊內(nèi)有效。 { let a = 10; } console.log(a) //R...
閱讀 3394·2021-11-22 13:53
閱讀 3433·2021-10-11 11:11
閱讀 945·2019-08-30 14:12
閱讀 1236·2019-08-29 17:16
閱讀 654·2019-08-29 16:45
閱讀 3364·2019-08-29 12:56
閱讀 682·2019-08-28 17:55
閱讀 2079·2019-08-26 13:24