国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS變量中有var定義和無var定義的區別以及es6中let命令和const命令

2019-11-19 17:30:36
字體:
來源:轉載
供稿:網友

 之前我們在寫js代碼的時候都知道可以用var定義全局變量和局部變量,也可以省略var,而且在非嚴格模式下不會報錯,但是并不知道兩者的區別...

var x = 1;y = 4;console.log(x);//1console.log(y);//4console.log(window.x);//1console.log(window.y);//4

簡單測試下可以知道定義的x和y都被掛載在window對象上,變為window下的屬性,這并不能說明什么...

delete x;delete y;console.log(window.x);//1console.log(window.y);//undefined

再看看執行上面代碼之后x屬性沒有被刪除,y被刪除了,這是區別就來了

在通過var進行定義后的變量不能被delete刪除,這是什么原因?ECMAScript 5標準中,可以通過Object.getOwnPropertyDescriptor()來獲取對象自身某個property的屬性信息:

console.log(Object.getOwnPropertyDescriptor(window,"x"));console.log(Object.getOwnPropertyDescriptor(window,"y"));

得到如下信息:

當不使用var進行定義是,變量默認的configurable為true,可以進行delete等命令進行操作,而當var在定義一個全局變量的時候configurable 變為了false,即不會被delete刪除.

此外,簡單說一下關于變量提升問題

alert(a);//Uncaught ReferenceError: a is not defineda = 100;alert(b);//undefined

var b = 200;先說第二段代碼,var聲明的全局變量b在js中會進行代碼提升,也就是說var b = 200;會被分解為var b;b=200;代碼解析的第時候會將var b;提升到最前面,并且在內存中開辟一個空間,由于b沒有被賦值,默認為undefined.第一段代碼中當js執行alert()函數時候由于沒有進行var聲明,變量沒有被提升,不存在內存開辟,所以在alert時候直接報錯!

在ECMAScript6標準中,一個重要的概念就是"JavaScript嚴格模式",需要在最前面加上"use strict";

let注意點:

1.let擁有塊級作用域,一個{}就是一個作用域

2.let在其作用域下面不存在變量提升

3.let在其作用域中不能被重復聲明(函數作用域和塊級作用域)

第一點:let的塊級作用域

注意:以下代碼都在嚴格模式下執行的

let n = 10;if(true){ let n = 50;}console.log(n);//10表示外層代碼塊不受內層代碼塊的影響,如果是用var定義的變量n,那么輸出的就是修改后的50.

第二點:變量提升問題

alert(a);//Uncaught ReferenceError: a is not definedlet a = 100;

不同var,let不存在變量提升,以上寫法會直接報錯.

第三點:重復聲明問題

(function(){ let lTest = "let"; var vTest = "var" let lTest = "let changed";//Uncaught SyntaxError: Identifier 'lTest' has already been declared var vTest = "var changed"; console.log(lTest); console.log(vTest);})();

let在同一個作用域下不允許進行重復變量聲明.否則也是直接報錯!!!

const命令

const用來聲明常量,一旦聲明,其值就不可以更改,如果你非得修改變量的值,js不會報錯,只是默默表示失敗(不起作用)

const的作用域與let相同,只在聲明所在的塊級作用域內有效,并且也是和let一樣不可以重復進行聲明.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赤峰市| 精河县| 兴和县| 顺平县| 砚山县| 井陉县| 石首市| 嘉义县| 高青县| 黑河市| 六枝特区| 康马县| 曲靖市| 喀喇沁旗| 巴东县| 高邮市| 托里县| 邹平县| 乌拉特前旗| 故城县| 湖北省| 太保市| 许昌县| 德令哈市| 交口县| 福清市| 莱阳市| 江山市| 祁阳县| 南溪县| 包头市| 韶山市| 呼图壁县| 长葛市| 凤阳县| 资溪县| 同心县| 米易县| 多伦县| 高密市| 延长县|