国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES6學習(一)之var、let、const

hlcc / 1186人閱讀

摘要:更多前端文章變量提升概述變量可在聲明之前使用。正常運行,控制臺輸出報錯,報錯,命令經(jīng)常會發(fā)生變量提升現(xiàn)象,按照一般邏輯,變量應該在聲明之后使用才對。主要是為了減少運行時錯誤,防止變量聲明前就使用這個變量,從而導致意料之外的行為。

更多前端文章
1、變量提升

概述:變量可在聲明之前使用。

console.log(a);//正常運行,控制臺輸出 undefined
var a = 1;
console.log(b);//報錯,Uncaught ReferenceError: b is not defined
let b = 1;
console.log(c);//報錯,Uncaught ReferenceError: c is not defined
const c = 1;

var 命令經(jīng)常會發(fā)生變量提升現(xiàn)象,按照一般邏輯,變量應該在聲明之后使用才對。為了糾正這個現(xiàn)象,ES6 規(guī)定 let 和 const 命令不發(fā)生變量提升,使用 let 和 const 命令聲明變量之前,該變量是不可用的。主要是為了減少運行時錯誤,防止變量聲明前就使用這個變量,從而導致意料之外的行為。

2、暫時性死區(qū)

概述:如果在代碼塊中存在 let 或 const 命令,這個區(qū)塊對這些命令聲明的變量,從一開始就形成了封閉作用域。凡是在聲明之前就使用這些變量,就會報錯。

var tmp = 123;
if (true) {
    tmp = "abc";//報錯,Uncaught ReferenceError: tmp is not defined
    let tmp;
}

剖析暫時性死區(qū)的原理,其實let/const同樣也有提升的作用,但是和var的區(qū)別在于

var在創(chuàng)建時就被初始化,并且賦值為undefined

let/const在進入塊級作用域后,會因為提升的原因先創(chuàng)建,但不會被初始化,直到聲明語句執(zhí)行的時候才被初始化,初始化的時候如果使用let聲明的變量沒有賦值,則會默認賦值為undefined,而const必須在初始化的時候賦值。而創(chuàng)建到初始化之間的代碼片段就形成了暫時性死區(qū)

3、不允許重復聲明

let不允許在相同作用域內(nèi),重復聲明同一個變量。

// 報錯
function func() {
  let a = 10;
  var a = 1;
}

// 報錯
function func() {
  let a = 10;
  let a = 1;
}
function func(arg) {
  let arg;
}
func() // 報錯

function func(arg) {
  {
    let arg;
  }
}
func() // 不報錯
4、塊級作用域

在es5中我們會遇到下面這寫情況
第一種場景,內(nèi)層變量可能會覆蓋外層變量。

var tmp = new Date();
function f() {
  console.log(tmp);
  if (false) {
    var tmp = "hello world";//沒有塊級作用域tmp變量提升到函數(shù)作用域里導致tmp為undefined
  }
}
f(); // undefined

第二種場景,用來計數(shù)的循環(huán)變量泄露為全局變量。

var s = "hello";
for (var i = 0; i < s.length; i++) {
  console.log(s[i]);
}
console.log(i); // 5

上面代碼中,變量i只用來控制循環(huán),但是循環(huán)結(jié)束后,它并沒有消失,泄露成了全局變量。

  let n = 5;
  if (true) {
    let n = 10;
  }
  console.log(n); // 5
}

let實際上為 JavaScript 新增了塊級作用域。

5、const注意點

1、const聲明變量的時候必須賦值,否則會報錯,同樣使用const聲明的變量被修改了也會報錯
2、const聲明變量不能改變,如果聲明的是一個引用類型,則不能改變它的內(nèi)存地址

const c ; //Uncaught SyntaxError: Missing initializer in const declaration
const a= {a:1};
a.a=2;
a={d:2};// Uncaught TypeError: Assignment to constant variable.
本質(zhì):const實際上保證的,并不是變量的值不得改動,而是變量指向的那個內(nèi)存地址所保存的數(shù)據(jù)不得改動。對于簡單類型的數(shù)據(jù)(數(shù)值、字符串、布爾值),值就保存在變量指向的那個內(nèi)存地址,因此等同于常量。但對于復合類型的數(shù)據(jù)(主要是對象和數(shù)組),變量指向的內(nèi)存地址,保存的只是一個指向?qū)嶋H數(shù)據(jù)的指針,const只能保證這個指針是固定的(即總是指向另一個固定的地址),至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的,就完全不能控制了

那么我們想得到不可修改的const要怎么做呢?應該使用Object.freeze方法。

const foo = Object.freeze({});

// 常規(guī)模式時,下面一行不起作用;
// 嚴格模式時,該行會報錯
foo.prop = 123;
// 除了將對象本身凍結(jié),對象的屬性也應該凍結(jié)。
var constantize = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach( (key, i) => {
    if ( typeof obj[key] === "object" ) {
      constantize( obj[key] );
    }
  });
};

參考文章
ECMAScript 6 入門

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/102823.html

相關文章

  • ES6學習手稿基本類型擴展

    摘要:它是一個通用標準,奠定了的基本語法。年月發(fā)布了的第一個版本,正式名稱就是標準簡稱。結(jié)語的基本擴展還有一些沒有在這里詳細介紹。 前言 ES6標準以及頒布兩年了,但是,好像還沒有完全走進我們的日常開發(fā)。這篇文章從ES6的基本類型擴展入手,逐步展開對ES6的介紹。 ECMAScript和JavaScript JavaScript是由Netscape創(chuàng)造的,該公司1996年11月將JavaSc...

    tommego 評論0 收藏0
  • ES6系列】變量與塊級作用域

    摘要:不允許在相同作用域內(nèi),重復聲明同一個變量。如但是在中則不再必要了,我們可以通過塊級作用域就能夠?qū)崿F(xiàn)本次主要針對中的變量和塊級作用域進行了梳理學習,并且通過與的實現(xiàn)方式進行了對比,從而看出其變化以及快捷與便利。 ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標準,已經(jīng)在 2015 年 6 月正式發(fā)布了。它的目標,是使得 JavaScript 語言可...

    PascalXie 評論0 收藏0
  • ES6系列文章 塊級作用域

    摘要:聲明之函數(shù)作用域和全局作用域。塊級作用域不能重復聲明臨時性死區(qū)等特性用來解決變量存在的種種問題。塊級作用域終于在外面訪問不到了。一些常量聲明使用聲明的變量名全部大寫。 ES5之前javascript語言只有函數(shù)作用域和全局作用域,使用var來聲明變量,var聲明的變量還存在變量提升使人困惑不已。我們先來復習一下ES5的var聲明,再對比學習let和const 。 var var聲明之函...

    趙連江 評論0 收藏0
  • ES6學習總結(jié)(1)

    摘要:返回一個對象,遍歷對象自身和繼承的所有可枚舉屬性不含,與相同和在紅寶書中就已經(jīng)提到過屬性,表示的是引用類型實例的一個內(nèi)部指針,指向該實例的構(gòu)造函數(shù)的原型對象。 半個月前就決定要將ES6的學習總結(jié)一遍,結(jié)果拖延癥一犯,半個月就過去了,現(xiàn)在補起來,慚愧慚愧。 阮一峰的《ES6標準入門》這本書有300頁左右,除了幾個新的API和js語法的擴展,真正有價值的內(nèi)容并不多。所謂存在即合理,每部分的...

    happyfish 評論0 收藏0
  • ES6 系列 letconst

    摘要:塊級作用域存在于函數(shù)內(nèi)部塊中字符和之間的區(qū)域和塊級聲明用于聲明在指定塊的作用域之外無法訪問的變量。和都是塊級聲明的一種。值得一提的是聲明不允許修改綁定,但允許修改值。這意味著當用聲明對象時沒有問題報錯臨時死區(qū)臨時死區(qū),簡寫為。 塊級作用域的出現(xiàn) 通過 var 聲明的變量存在變量提升的特性: if (condition) { var value = 1; } console.lo...

    PascalXie 評論0 收藏0

發(fā)表評論

0條評論

hlcc

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<