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

資訊專欄INFORMATION COLUMN

ES6學(xué)習(xí)(一)之var、let、const

hlcc / 1182人閱讀

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

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

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

console.log(a);//正常運(yùn)行,控制臺(tái)輸出 undefined
var a = 1;
console.log(b);//報(bào)錯(cuò),Uncaught ReferenceError: b is not defined
let b = 1;
console.log(c);//報(bào)錯(cuò),Uncaught ReferenceError: c is not defined
const c = 1;

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

2、暫時(shí)性死區(qū)

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

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

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

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

let/const在進(jìn)入塊級(jí)作用域后,會(huì)因?yàn)樘嵘脑蛳葎?chuàng)建,但不會(huì)被初始化,直到聲明語句執(zhí)行的時(shí)候才被初始化,初始化的時(shí)候如果使用let聲明的變量沒有賦值,則會(huì)默認(rèn)賦值為undefined,而const必須在初始化的時(shí)候賦值。而創(chuàng)建到初始化之間的代碼片段就形成了暫時(shí)性死區(qū)

3、不允許重復(fù)聲明

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

// 報(bào)錯(cuò)
function func() {
  let a = 10;
  var a = 1;
}

// 報(bào)錯(cuò)
function func() {
  let a = 10;
  let a = 1;
}
function func(arg) {
  let arg;
}
func() // 報(bào)錯(cuò)

function func(arg) {
  {
    let arg;
  }
}
func() // 不報(bào)錯(cuò)
4、塊級(jí)作用域

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

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

第二種場(chǎng)景,用來計(jì)數(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實(shí)際上為 JavaScript 新增了塊級(jí)作用域。

5、const注意點(diǎn)

1、const聲明變量的時(shí)候必須賦值,否則會(huì)報(bào)錯(cuò),同樣使用const聲明的變量被修改了也會(huì)報(bào)錯(cuò)
2、const聲明變量不能改變,如果聲明的是一個(gè)引用類型,則不能改變它的內(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實(shí)際上保證的,并不是變量的值不得改動(dòng),而是變量指向的那個(gè)內(nèi)存地址所保存的數(shù)據(jù)不得改動(dòng)。對(duì)于簡(jiǎn)單類型的數(shù)據(jù)(數(shù)值、字符串、布爾值),值就保存在變量指向的那個(gè)內(nèi)存地址,因此等同于常量。但對(duì)于復(fù)合類型的數(shù)據(jù)(主要是對(duì)象和數(shù)組),變量指向的內(nèi)存地址,保存的只是一個(gè)指向?qū)嶋H數(shù)據(jù)的指針,const只能保證這個(gè)指針是固定的(即總是指向另一個(gè)固定的地址),至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的,就完全不能控制了

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

const foo = Object.freeze({});

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

參考文章
ECMAScript 6 入門

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

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

相關(guān)文章

  • ES6學(xué)習(xí)手稿基本類型擴(kuò)展

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

    tommego 評(píng)論0 收藏0
  • ES6系列】變量與塊級(jí)作用域

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

    PascalXie 評(píng)論0 收藏0
  • ES6系列文章 塊級(jí)作用域

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

    趙連江 評(píng)論0 收藏0
  • ES6學(xué)習(xí)總結(jié)(1)

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

    happyfish 評(píng)論0 收藏0
  • ES6 系列 letconst

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

    PascalXie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

hlcc

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<