摘要:一新增了命令和一樣都是用來聲明標量,但所聲明的變量只在聲明的代碼塊內及聲明之后有效命令適合在循環中使用在循環內有效在全局內有效命令暫時性死區大括號中的使用了聲明,所以在大括號中暫時只能在聲明之后有效不允許在同一作用域內重復聲明變量,因此不能
一、ES6新增了let命令
let 和 var 一樣都是用來聲明標量,但let所聲明的變量只在【聲明的代碼塊內】及【聲明之后】有效
{ 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循環中使用
// i在for循環內有效 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在全局內有效 for(var i = 0;i < 5;i++){ console.log(i); // 0 1 2 3 4 } console.log(i); // 5
let 命令暫時性死區
// 大括號中的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不允許在同一作用域內重復聲明變量,因此不能在函數內重新聲明變量
{ 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只有全局作用域和函數作用域,會出現以下的問題
//1、內層變量覆蓋了外層變量 var number = 5; show(); function show(){ console.log(number); // undefined var number = 10 ; } //2、i泄露成全局變量 var string = "hello"; for(var i = 0 ;iES6塊級作用域寫法(塊級作用域可以無限嵌套,可以代替ES5的匿名函數IIFE)
{ let number = 5; console.log(number); // 5 { let number = "hello"; console.log(number); // hello } }ES5嚴格模式下,函數不能在塊級中聲明,ES6明確規定可以在塊級作用域中聲明函數,但聲明的函數有點類似let,在塊級作用域之外不可引用,由于瀏覽器可以忽略以上規則,所以盡量避免在塊級作用域中聲明函數。
//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一樣,不能重復聲明 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 //對于復合對象,變量名指向的是數據的地址,const聲明的指向的是數據的地址不變,但數據可以變;若要凍結數據,可以使用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; // 常規模式,該行代碼無效,嚴格模式下會報錯 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總結:
ES5 有兩種聲明變量的方法:var 和 function命令 ES6 有六種聲明變量的方法:var 、 function 、let 、const 、import、class命令。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80810.html
摘要:對比常量聲明與聲明常量聲明與聲明,都是塊級聲明。最后一點全局塊級綁定與不同于的另一個方面是在全局作用域上的表現。塊級綁定新的最佳實踐在的發展階段,被廣泛認可的變量聲明方式是默認情況下應當使用而不是。總結與塊級綁定將詞法作用域引入。 var變量與變量提升 使用var關鍵字聲明的變量,無論其實際聲明位置在何處,都會被視為聲明于所在函數的頂部(如果聲明不在任意函數內,則被視為在全局作用域的頂...
摘要:考慮到環境導致的行為差異太大,應該避免在塊級作用域內聲明函數。函數聲明語句函數表達式循環循環還有一個特別之處,就是循環語句部分是一個父作用域,而循環體內部是一個單獨的子作用域。聲明一個只讀的常量。 es6學習筆記-let,const和塊級作用域_v1.0 塊級作用域 javascript 原來是沒有塊級作用域的,只有全局作用域和函數作用域 例子1 因為沒有塊級作用域,所以每次的i都是一...
摘要:外層作用域不報錯正常輸出塊級作用域與函數聲明規定,函數只能在頂層作用域和函數作用域之中聲明,不能在塊級作用域聲明。規定,塊級作用域之中,函數聲明語句的行為類似于,在塊級作用域之外不可引用。同時,函數聲明還會提升到所在的塊級作用域的頭部。 前言:最近開始看阮一峰老師的《ECMAScript 6 入門》(以下簡稱原...
摘要:入門一前言由于最近本人在學習,做一些筆記能夠更好的熟悉,就趁此機會來寫一篇關于的新人學習摘要吧。的作用域與命令相同只在聲明所在的塊級作用域內有效。塊級作用域新增方式和實際上為新增了塊級作用域。同時,函數聲明還會提升到所在的塊級作用域的頭部。 ECMAScript6/ES6 入門 一、前言 由于最近本人在學習ES6,做一些筆記能夠更好的熟悉,就趁此機會來寫一篇關于ES6的新人學習摘要吧。...
摘要:聲明的變量只在其所在的代碼塊內有效。只要在聲明之前使用這些變量,就會報錯。在語法上稱為暫時性死區有時候,會不經間遇到比較隱蔽的死區,不太容易被發現。不允許重復聲明不允許在相同的作用域內聲明同一個變量。一旦聲明,其值就不能再改變。 let && const let let聲明的變量只在其所在的代碼塊內有效。 { let a = 10; } console.log(a) //R...
閱讀 3376·2021-11-22 13:53
閱讀 3411·2021-10-11 11:11
閱讀 932·2019-08-30 14:12
閱讀 1222·2019-08-29 17:16
閱讀 640·2019-08-29 16:45
閱讀 3349·2019-08-29 12:56
閱讀 670·2019-08-28 17:55
閱讀 2065·2019-08-26 13:24