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

資訊專欄INFORMATION COLUMN

let語句

junbaor / 2282人閱讀

摘要:用法描述語句允許申明一個(gè)作用域被限制在代碼塊內(nèi)的變量語句或表達(dá)式。淺析之所以報(bào)錯(cuò)是因?yàn)樗昝鞯淖兞恐辉谡Z句所在代碼塊內(nèi)有效和對比作用域上面這段代碼可以看到,的作用域是語句所在代碼塊或者其子塊,而的作用域則是整個(gè)封閉函數(shù)。

用法
let myName = "luoxue";
let age = 25;
描述

let 語句允許申明一個(gè)作用域被限制在代碼塊內(nèi)的變量、語句或表達(dá)式。

淺析
{
  let myName = "luoxue";
}
console.log(myName); // myName is not defined

之所以報(bào)錯(cuò) ,是因?yàn)?let 所申明的變量只在 let 語句所在代碼塊內(nèi)有效;

var 對比
1、作用域
{
  let myName = "luoxue";
  var age = 25;
  console.log(myName); // luoxue
}
console.log(myName); // myName is not defined
console.log(age); // 25

上面這段代碼可以看到,let 的作用域是 let 語句所在代碼塊或者其子塊,而 var 的作用域則是整個(gè)封閉函數(shù)。

2、let 不存在變量提升
console.log(color); // color is not defined
let color = "orange";

console.log(colors); // undefined
var colors = "yellow";
3、暫時(shí)性死區(qū)

只要塊級(jí)作用域內(nèi)存在 let 語句,它所申明的變量就“綁定”這個(gè)區(qū)域,不受外部的影響,如下:

var love = "kk";
if(true) {
  love = "kkk"; // love is not defined
  let love = "k";
}

注:ES6明確規(guī)定,如果區(qū)塊內(nèi)存在 let const 語句,則這個(gè)區(qū)塊對這些語句申明的變量從一開始就形成封閉作用域,只要在申明之前實(shí)用,就會(huì)報(bào)錯(cuò),如下也會(huì)報(bào)錯(cuò):

{
  title = "Love you"; // title is not defined
  console.log(title); // title is not defined
  
  let title;
  console.log(title); // undefined

  title = "Love kk";
  console.log(title); // Love kk
}

暫時(shí)性死區(qū)的本質(zhì):只要一進(jìn)入當(dāng)前作用域,所要實(shí)用的變量就已經(jīng)存在,但是不可獲取,只有出現(xiàn)申明變量的那行代碼之后,才可以獲取和實(shí)用該變量。

4、不允許重復(fù)申明
{
  let yourName = "kk"; // Identifier "yourName" has already been declared
  let yourName = "k";
}

下面的代碼書寫方式是不允許的:

let fn = (arg) => let arg = 25; // Unexpected identifier
運(yùn)用

有一道題目如下,說明為什么 a[3]() 的結(jié)果是5,如何實(shí)現(xiàn) a[3]() 的結(jié)果是3?

var arr = [];
for(var i = 0; i < 5; i++) {
  arr[i] = function() {
    console.log(i);
  }
}
arr[3](); // 5

這里的 i 是用的 var 申明的,那么 i 的作用域則是全局,當(dāng)用 a[3]() 調(diào)用時(shí) i 的值隨著循環(huán)的結(jié)束已經(jīng)變?yōu)?,所以 arr[3]() 的值是5,可以使用 let 語句來重構(gòu)一下,如下:

let arr = [];
for(let i = 0; i < 5; i++) {
  arr[i] = function() {
    console.log(i);
  }
}
arr[3](); // 3

因?yàn)樵?for 語句里面用 let 定義的 i 的作用域是 for 語句里面的代碼塊,所以每次循環(huán)的 i都是一個(gè)新的變量,都互不干擾,最后執(zhí)行結(jié)果也就是對應(yīng)的3,當(dāng)然,這里也可以實(shí)用閉包的方式來實(shí)現(xiàn),代碼如下:

// 閉包的實(shí)現(xiàn)方式
var arr2 = [];
for(var i = 0; i < 5; i++) {
    arr2[i] =(function(e) {
        return function() {
            console.log(e);
        }
    })(i);
}
arr2[3]();

示例

參考:
阮一峰老師的《es6入門標(biāo)準(zhǔn)》第二章第一小節(jié)(實(shí)體書);
MDN let語句;

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

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

相關(guān)文章

  • JS變量生命周期:為什么 let 沒有被提升

    摘要:請注意,就變量生命周期而言,聲明階段與變量聲明是不同的概念。提升在生命周期中無效的原因如上所述,提升是變量在作用域頂部的耦合聲明和初始化階段。然而,生命周期分離聲明和初始化階段。解耦消除了的提升期限。 為了保證的可讀性,本文采用意譯而非直譯。 提升是將變量或函數(shù)定義移動(dòng)到作用域頭部的過程,通常是 var 聲明的變量和函數(shù)聲明function fun() {...}。 當(dāng) ES6 引入l...

    hoohack 評(píng)論0 收藏0
  • JS變量生命周期:為什么 let 沒有被提升

    摘要:請注意,就變量生命周期而言,聲明階段與變量聲明是不同的概念。提升在生命周期中無效的原因如上所述,提升是變量在作用域頂部的耦合聲明和初始化階段。然而,生命周期分離聲明和初始化階段。解耦消除了的提升期限。 為了保證的可讀性,本文采用意譯而非直譯。 提升是將變量或函數(shù)定義移動(dòng)到作用域頭部的過程,通常是 var 聲明的變量和函數(shù)聲明function fun() {...}。 當(dāng) ES6 引入l...

    Steven 評(píng)論0 收藏0
  • 你真的懂switch嗎?聊聊switch語句中的塊級(jí)作用域

    摘要:最近在代碼中不小心不規(guī)范的,在里面定義了塊級(jí)變量,導(dǎo)致頁面在某些瀏覽器中出錯(cuò),本文討論以下語句中的塊級(jí)作用域。而與無關(guān)每一個(gè)并不會(huì)構(gòu)成一個(gè)獨(dú)立的塊級(jí)作用域。 ??最近在代碼中不小心不規(guī)范的,在switch里面定義了塊級(jí)變量,導(dǎo)致頁面在某些瀏覽器中出錯(cuò),本文討論以下switch語句中的塊級(jí)作用域。 switch語句中的塊級(jí)作用域 switch語句中的塊級(jí)作用域可能存在的問題 規(guī)范和檢...

    zone 評(píng)論0 收藏0
  • 你真的懂switch嗎?聊聊switch語句中的塊級(jí)作用域

    摘要:最近在代碼中不小心不規(guī)范的,在里面定義了塊級(jí)變量,導(dǎo)致頁面在某些瀏覽器中出錯(cuò),本文討論以下語句中的塊級(jí)作用域。而與無關(guān)每一個(gè)并不會(huì)構(gòu)成一個(gè)獨(dú)立的塊級(jí)作用域。 ??最近在代碼中不小心不規(guī)范的,在switch里面定義了塊級(jí)變量,導(dǎo)致頁面在某些瀏覽器中出錯(cuò),本文討論以下switch語句中的塊級(jí)作用域。 switch語句中的塊級(jí)作用域 switch語句中的塊級(jí)作用域可能存在的問題 規(guī)范和檢...

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

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

0條評(píng)論

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