成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Es6:新手第一篇 let 和 const

AJie / 1069人閱讀

Es6 let 和 const

基本用法

   let a = 10
   console.log(a) //10
   // 代碼塊內(nèi)執(zhí)行
   {
       let b = 5
       console.log(b) // 5
   }

for循環(huán)內(nèi)也是比較試用

   for (let i =0;i<3;i++) {
      console.log(i)  // 0,1,2
   }

Es6 let命令只在所在的代碼塊內(nèi)使用(塊級(jí)作用域)
例1 使用let在函數(shù)代碼塊內(nèi)使用,Es5中是沒有塊級(jí)作用域的,Es6中的let實(shí)際上是為Javascript新增了塊級(jí)作用域,其實(shí)在聲明a為10的代碼塊中則為一個(gè)塊級(jí)作用域,if代碼塊中也是塊級(jí)作用域,這就表明了現(xiàn)在有兩個(gè)塊級(jí)作用域,重點(diǎn)來了外層代碼塊不受內(nèi)層代碼塊影響,所以a在不同的地方打印出的結(jié)果不同

   function f() {
        let a = 10
        if (1===1) {
            let a = 5
            console.log(a) // 5
        }
        console.log(a) // 10
    }
    f()
    

例2 這個(gè)循環(huán)的例子let聲明了之后,在循環(huán){}代碼塊內(nèi)都屬于i的塊級(jí)作用域內(nèi),所以在里面怎么打印都會(huì)有結(jié)果,而在循環(huán)外部打印i的結(jié)果則是未定義

    for (let i =0;i<3;i++) {
      console.log(i)  // 0,1,2
    }
    console.log(i) // 這樣會(huì)報(bào)錯(cuò) i is not defined

然而var則不一樣,var也是聲明變量,它則在全局范圍內(nèi)有效,讓我們來看看
例1 現(xiàn)在看看var定義了變量,在內(nèi)部可以打印出小于三的每個(gè)結(jié)果,在代碼塊外層同樣可以得到結(jié)果,但是結(jié)果和代碼塊內(nèi)的不一樣,這是因?yàn)橥鈱拥膇是拿到了循環(huán)完成之后的結(jié)果

   for (var i =0;i<3;i++) {
      console.log(i)  // 0,1,2
    }
    console.log(i) // 3 為什么會(huì)得到3,是因?yàn)閒or循環(huán)從0開始執(zhí)行,i++,1然后是2,只執(zhí)行2次
    

例2 這里使用var得到的結(jié)果全是5,我們來分析一下它的執(zhí)行步驟,首先執(zhí)行的函數(shù),聲明變量a為10,if代碼塊,然后再次聲明a為5(內(nèi)層改變外層),打印5,執(zhí)行出代碼塊再次打印a時(shí),此時(shí)a的值已經(jīng)被改變5

   function f() {
        var a = 10
        if (1===1) {
            // 在一個(gè)代碼塊的中變量并不會(huì)覆蓋掉代碼塊外面的變量
            var a = 5
            console.log(a) // 5
        }
        console.log(a) // 5
    }
    f()

Es6 let 不存在變量提升和暫時(shí)性死區(qū)
例1 測試let不存在變量提升

   {
       console.log(foo) // 報(bào)錯(cuò)ReferenceError
       let foo = 1
   }

如果存在變量提升的話上面的代碼執(zhí)行應(yīng)該是

   {
       let a
       console.log(a) //undefined
       a=2
   }

例2 如果使用let這樣操作執(zhí)行到if會(huì)報(bào)錯(cuò),因?yàn)閘et不存在變量提升

   function func() {
       if (typeof let == "undefined") {
       }
       let val = ""
   }

我們來看看var的變量提升是什么樣的,與let區(qū)別在哪里
例1 var的變量提升(值不提升)

   {
       console.log(foo) // undefined
       var foo = 1
   }

例2 var變量提升(先判斷后聲明),這樣就不會(huì)報(bào)錯(cuò)

   function func() {
       if (typeof val == "undefined") {
       }
       var val = ""
   }

let 存在的暫時(shí)性死區(qū)社么為let的死區(qū),只要是在let聲明之前則為死區(qū)

let 聲明在同層代碼塊內(nèi),不可以重復(fù)聲明
例1 在一個(gè)函數(shù)內(nèi)聲明相同的變量名,使用let,這樣會(huì)報(bào)錯(cuò),如果使用var就會(huì)報(bào)錯(cuò)

    func()
    function func() {
        let a = 1
        let a = 2
        console.log(a, "xx")
    }
例2 現(xiàn)在我們來看看var的執(zhí)行結(jié)果,var 是可以重復(fù)聲明的
    func()
    function func() {
        var a = 1
        var a = 2
        console.log(a, "xx") // 2
    }

作用域和函數(shù)聲明
ES5 規(guī)定,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明,不能在塊級(jí)作用域聲明,接下來我們來看看Es5中沒有塊級(jí)作用域,下面的例子執(zhí)行函數(shù)f()打印出的結(jié)果為I am inside!因?yàn)閕f內(nèi)函數(shù)會(huì)被提升到頂部,然而在es6中理論的結(jié)果為I am outside!,但是會(huì)報(bào)錯(cuò)!

   function f() { console.log("I am outside!"); }
   (function () {
           if (false) {
               // 重復(fù)聲明一次函數(shù)f
               function f() { console.log("I am inside!"); }
           }
       f()
   }())

以上之所以會(huì)在瀏覽器內(nèi)報(bào)錯(cuò)因?yàn)樵贓s6瀏覽器中塊級(jí)作用域的聲明相當(dāng)于var聲明的變量(變量提升),所以我們盡量寫函數(shù)表達(dá)式而不是函數(shù)聲明語句,下面這個(gè)在Es6瀏覽器中得到的結(jié)果則為I am outside!,內(nèi)層作用域不影響外層作用域,如果將let 替換成 var 將還是會(huì)報(bào)錯(cuò)!

   function f() { console.log("I am outside!"); }
   (function () {
           if (false) {
               // 重復(fù)聲明一次函數(shù)f
               let f = function f() { console.log("I am inside!"); }
           }
       f()
   }())
   
   例1 創(chuàng)建函數(shù)有兩種方法一種是表達(dá)式,一種是函數(shù)聲明,下面的去掉foo的代碼會(huì)正常執(zhí)行,這就是區(qū)別
   function test() {
       foo() // foo not fun
       bar()
       var foo = function () { // 變量提升
           alert("this won"t run!");
       }
       function bar() {
           alert("this will run!");
       }
   }
   test()

const聲明只讀常量,常量一旦聲明就不能改變,與變量的區(qū)別就在上面

   //const一旦聲明變量,就必須立即初始化,不能留到以后賦值。
   const foo
   //const命令聲明的常量也是不提升,同樣存在暫時(shí)性死區(qū),只能在聲明的位置后面使用
   console.log(a) // 會(huì)報(bào)錯(cuò)
   const a = 1
   // const聲明的常量,也與let一樣不可重復(fù)聲明,以下都會(huì)報(bào)錯(cuò)
   const b = 1
   const b = 2
   // 正確的聲明只需聲明一次
   const c = 1
   console.log(c)  //1
  它的本質(zhì)說白了就是指向內(nèi)存的數(shù)據(jù)不得改的,但是還有另一種情況
   const foo = {};
   // 為 foo 添加一個(gè)屬性,可以成功
   foo.prop = 123;
   foo.prop = 321;
   console.log(foo.prop); // 321
   
   foo = {} // 就會(huì)報(bào)錯(cuò),不能把foo指向另一個(gè)地址,但對(duì)象本身是可變的,所以依然可以為其添加新屬性。
  Es6聲明變量的6種方法(var,function (es5)),let,const, import, class

頂層對(duì)象window和global對(duì)象(這里可以看看文檔就行,最重要的可以多看看this)

  瀏覽器window:Es6中的六種方法聲明的變量,使用window都可以拿到,因?yàn)轫攲訉?duì)象的屬性與全局變量是等價(jià)的
  
  global:ES5 的頂層對(duì)象,本身也是一個(gè)問題,因?yàn)樗诟鞣N實(shí)現(xiàn)里面是不統(tǒng)一的。
   瀏覽器里面,頂層對(duì)象是window,但 Node 和 Web Worker 沒有window。
   瀏覽器和 Web Worker 里面,self也指向頂層對(duì)象,但是 Node 沒有self。
   Node 里面,頂層對(duì)象是global,但其他環(huán)境都不支持。
  

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

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

相關(guān)文章

  • ES6學(xué)習(xí)摘要(01)(新人學(xué)習(xí))

    摘要:入門一前言由于最近本人在學(xué)習(xí),做一些筆記能夠更好的熟悉,就趁此機(jī)會(huì)來寫一篇關(guān)于的新人學(xué)習(xí)摘要吧。的作用域與命令相同只在聲明所在的塊級(jí)作用域內(nèi)有效。塊級(jí)作用域新增方式和實(shí)際上為新增了塊級(jí)作用域。同時(shí),函數(shù)聲明還會(huì)提升到所在的塊級(jí)作用域的頭部。 ECMAScript6/ES6 入門 一、前言 由于最近本人在學(xué)習(xí)ES6,做一些筆記能夠更好的熟悉,就趁此機(jī)會(huì)來寫一篇關(guān)于ES6的新人學(xué)習(xí)摘要吧。...

    dmlllll 評(píng)論0 收藏0
  • 新手快速學(xué)習(xí)ES6語法,用最快的速度入門ES6就看這里

    摘要:的作用域與命令相同只在聲明所在的塊級(jí)作用域內(nèi)有效。數(shù)值和布爾值的解構(gòu)賦值解構(gòu)賦值時(shí),如果等號(hào)右邊是數(shù)值和布爾值,則會(huì)先轉(zhuǎn)為對(duì)象。上面代碼中,數(shù)值和布爾值的包裝對(duì)象都有屬性,因此變量都能取到值。默認(rèn)值解構(gòu)賦值允許指定默認(rèn)值。 最近正在學(xué)習(xí)ES6,對(duì)于ES6的語法有一些自己的理解, 想寫這篇文章幫助跟我一樣的新手快速入門ES6而不至于連代碼都看不懂. 至于開發(fā)環(huán)境的搭建什么...

    vspiders 評(píng)論0 收藏0
  • ES6學(xué)習(xí)第一節(jié) 塊級(jí)作用域的聲明以及綁定 (一) let聲明

    摘要:塊級(jí)作用域綁定變量聲明的變量聲明與其他的一些計(jì)算機(jī)語言不同,在類的語言中,變量總是在被聲明的地方創(chuàng)建而在中變量創(chuàng)建的位置取決于你如何聲明它,為我們提供了新的聲明方式用來讓開發(fā)者能夠更好的控制變量的作用域我們通過聲明的變量,無論其聲明位置在哪 塊級(jí)作用域綁定 1.變量聲明 JS的變量聲明與其他的一些計(jì)算機(jī)語言不同,在類C的語言中,變量總是在被聲明的地方創(chuàng)建;而在JS中變量創(chuàng)建的位置取決于...

    chanthuang 評(píng)論0 收藏0
  • 新手開發(fā)中常用ES6基礎(chǔ)知識(shí)總結(jié)

    摘要:感覺對(duì)我這種沒實(shí)習(xí)沒工作的新手,雖然一些高級(jí)的功能暫時(shí)用不上,但是一些基礎(chǔ)的知識(shí)還是為平時(shí)的開發(fā)提供了巨大的便利。學(xué)習(xí)告一段落,現(xiàn)在結(jié)合平時(shí)的開發(fā),總結(jié)一些常用的知識(shí)。日常開發(fā)中,塊級(jí)作用域中使用的變量,盡量使用或者聲明。使用時(shí),進(jìn)行合并。 很早之前就學(xué)過TypeScript和ES6,后來做項(xiàng)目的時(shí)候零零散散用了些。這幾天又系統(tǒng)地把ES6的知識(shí)看了一遍。感覺對(duì)我這種沒實(shí)習(xí)沒工作的新手,...

    Paul_King 評(píng)論0 收藏0
  • 我去!又是勇士騎士?--NBA資訊小程序

    摘要:話不多說,先來一張我科的圖坐鎮(zhèn)資訊小程序出來啦作為一個(gè)剛接觸小程序不久的前端小白菜,恰逢最近如火如荼的雙搶七大戰(zhàn)騎士與勇士又又又又又一次的巔峰對(duì)決實(shí)話真的看膩了決定寫一個(gè)資訊的小程序來玩玩。 showImg(https://segmentfault.com/img/remote/1460000015202389?w=580&h=580);話不多說,先來一張我科的圖坐鎮(zhèn) NBA資訊小程序...

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

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

0條評(píng)論

閱讀需要支付1元查看
<