成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ES6 入坑筆記:說說一些新概念

scq000 / 2056人閱讀

摘要:雖然現(xiàn)在還需要借助的力量但未來一定是屬于。將類引入了,大大簡化了原先復(fù)雜的工作從前要實(shí)現(xiàn)繼承得多麻煩工廠模式無法解決對象識(shí)別,構(gòu)造函數(shù)模式內(nèi)存浪費(fèi),原型模式私有方法還要結(jié)合構(gòu)造模式定義實(shí)例實(shí)現(xiàn)類的繼承,我要用到繼承類可以重寫父類的方法

雖然現(xiàn)在還需要借助babel的力量但未來一定是屬于ES6。(那ES7?-_-|||)

let

在ES6之前javascript只有兩種作用域,即全局作用域和函數(shù)作用域,let的出現(xiàn)彌補(bǔ)JS了沒有塊作用域的痛點(diǎn)

let的塊作用域
function cat(){
    let mew = "喵"
    let angry = true
    console.log(mew)
    if(angry){
        let mew = "..."  //外層{}成為塊作用域
        console.log(mew)
    }
    console.log(mew)
}
cat()
//喵
//...
//喵

讓我們和var做一下對比

function cat(){
    var mew = "喵"
    var angry = true
    console.log(mew)
    if(angry){
        var mew = "..."  //外層 mew 被覆蓋
        console.log(mew)
    }
    console.log(mew)
}
cat()
//喵
//...
//...

而let由于產(chǎn)生了塊作用域似的mew = "..." 只在塊作用域內(nèi)被使用,所以第三次輸出mew是"喵"

如上由于var不產(chǎn)生塊作用域所以if語句中的var mew = "..."相當(dāng)于覆蓋了函數(shù)中第一個(gè)mew(即函數(shù)作用域中的)所以在次輸出mew是"..."

應(yīng)用

上述例子中,通過let的使用可以避免變量被不必要地覆蓋
讓我們再看一個(gè)栗子:

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

為了輸出3,通常會(huì)使用閉包來處理

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

這不僅使代碼變得冗長了不少,而且的外層可以訪問到i(說明i在使用完并未被清除,內(nèi)存泄漏)

使用let聲明只在塊級(jí)作用域內(nèi)有效

var a = []
for (let i = 0; i < 5; i++) {
  a[i] = function () {
    console.log(i)
  }
}
a[3]()  // 3
一些需要注意的點(diǎn) 暫時(shí)性死區(qū)

在var 聲明前使用變量,會(huì)得到undefined

console.log(abc) //undefined
var abc

但在let 聲明前使用變量,會(huì)報(bào)錯(cuò)

console.log(abc)  //錯(cuò)誤
var abc

這是由于在let的作用域中,let申明之前會(huì)形成暫時(shí)性死區(qū),在變量定義之前,使該變量都是不可用的。

重復(fù)聲明

在塊級(jí)作用域中重復(fù)聲明會(huì)報(bào)錯(cuò)

{
var color = "black"
let color = "white"
}
//  報(bào)錯(cuò)
{
let color = "black"
var color = "white"
}
//  報(bào)錯(cuò)
{
let color = "black"
let color = "white"
}
//  報(bào)錯(cuò)
箭頭函數(shù)

箭頭函數(shù)的使用可以使書寫更為簡練

計(jì)算數(shù)組各項(xiàng)平方
let ary = [1,2,3,5]
let res = ary.map(function(item){return item*item}) //[1, 4, 9, 25]

使用箭頭函數(shù)可以簡化書寫

let ary = [1,2,3,5]
let res = ary.map((item) => {return item*item}) //[1, 4, 9, 25]

更進(jìn)一步可以省略括號(hào)(多個(gè)參數(shù)不能省略括號(hào))

let ary = [1,2,3,5]
let res = ary.map(item => {return item*item}) //[1, 4, 9, 25]

函數(shù)可以進(jìn)一步簡化成:

let ary = [1,2,3,5]
let res = ary.map(item => item * item )  //[1, 4, 9, 25]
模板字符串

模版字符串是對字符串拼接的改進(jìn),以往輸出帶有變量的語句時(shí),我們采用字符串拼接的方式,而模板字符串可以在字符串中直接使用變量,即簡化書寫同時(shí)也降低出錯(cuò)的風(fēng)險(xiǎn)

let name = "Yoda"
console.log("My name is " + name) //
console.log(`My name is ${name}`) //模板字符串

模板字符串使用反引號(hào) ( ) 來代替普通字符串中的用雙引號(hào)和單引號(hào);

模板字符串使用包含特定語法(${expression})的占位符;

模板字符串可以不需換行符直接使用換行:

let name = "Yoda"
console.log(`My name is ${name}
what‘s your name`) 
// My name is Yoda
// what‘s your name

可以直接顯示計(jì)算結(jié)果

let a = 1
let b = 2
console.log(`${a} + $ = ${ a + b }) 
// 1 + 2 = 3
延展操作符
let cuboid  = [2,3,4]
let cuboidVolume = (a,b,c) => {console.log(a*b*c)}
cuboidVolume(cuboid[0], cuboid[1], cuboid[2])  //24
//延展操作符
cuboidVolume(...cuboid)
// 24

延展操作符可以將數(shù)組拆分傳作為參數(shù)入函數(shù)

延展操作符可以用于數(shù)組拼接:

let fruit  = ["orange","apple","banana"]
let meat = ["beef"]
let breakfast = [...fruit, ...meat , "bread"]
// ["orange", "apple", "banana", "beef", "bread"]
Classes(類)與繼承

總所周知,js的原型鏈繼承向來以難以理解外加坑多著稱
(構(gòu)造函數(shù),原型對象,實(shí)例對象它們之間剪不斷理還亂的關(guān)系,如果再加上繼承,prototype和[[prototype]]的指向@_@說多了都是淚啊)
由于JS中沒有類的概念,許多初學(xué)者都掉坑原型鏈之中。
ES6將類引入了,大大簡化了原先復(fù)雜的工作(從前要實(shí)現(xiàn)繼承得多麻煩:工廠模式無法解決對象識(shí)別,構(gòu)造函數(shù)模式內(nèi)存浪費(fèi),原型模式私有方法還要結(jié)合構(gòu)造模式...)

定義

class Person {
    constructor(name,age){
        this.name = name
        this.age = age
    }
    say(){
        console.log(`Hello my name is ${this.name}`)
    }
}
//person 實(shí)例
let person = new Person("Yoda",2000)
person.name  //"Yoda"
person.say() //Hello my name is Yoda

實(shí)現(xiàn)類的繼承,我要用到extend:

class Programmer extends Person{
    constructor(name,age, language){
        super(name,age)
        this.language = language
    }
}
let javaProgrammer = new Programmer("Jack",22,"java")
javaProgrammer.language //"java"

繼承類可以重寫父類的方法:

class Programmer extends Person{
    constructor(name,age, language){
        super(name,age)
        this.language = language
    }
    say(){
        console.log(`I am a programmer using ${this.language}`)
    }
}
let javaProgrammer = new Programmer("Jack",22,"java")
javaProgrammer.say() //I am a programmer using java

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80101.html

相關(guān)文章

  • JS筆記

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0
  • 2017-06-23 前端日報(bào)

    摘要:前端日報(bào)精選大前端公共知識(shí)梳理這些知識(shí)你都掌握了嗎以及在項(xiàng)目中的實(shí)踐深入貫徹閉包思想,全面理解閉包形成過程重溫核心概念和基本用法前端學(xué)習(xí)筆記自定義元素教程阮一峰的網(wǎng)絡(luò)日志中文譯回調(diào)是什么鬼掘金譯年,一個(gè)開發(fā)者的好習(xí)慣知乎專 2017-06-23 前端日報(bào) 精選 大前端公共知識(shí)梳理:這些知識(shí)你都掌握了嗎?Immutable.js 以及在 react+redux 項(xiàng)目中的實(shí)踐深入貫徹閉包思...

    Vixb 評(píng)論0 收藏0
  • 流程控制: jQ Deferred 與 ES6 Promise 使用新手向入坑!

    摘要:謝謝大大指出的關(guān)于中用的不到位的錯(cuò)誤,貼上大大推薦的文章中的菜鳥和高階錯(cuò)誤,文章很詳細(xì)說明了一些使用中的錯(cuò)誤和指導(dǎo)。另外更正內(nèi)容在后面補(bǔ)充。從開始說到異步流程控制,之前用的比較多的是的。 showImg(https://segmentfault.com/img/remote/1460000006771934); 謝謝n?i?g?h?t?i?r?e?大大指出的關(guān)于Promise中catc...

    tomlingtm 評(píng)論0 收藏0
  • 前端入坑體驗(yàn)與分享

    摘要:同源策略同源策略是一種約定,由公司年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到等攻擊。 一、Vue變化檢測 背景 初始化對象,屬性未知;某些事件觸發(fā)時(shí),對象改變(新增屬性),Vue監(jiān)聽不到 原因 Vue.js 不能檢測到對象屬性的添加或刪除,因?yàn)閂ue.js 在初始化實(shí)例時(shí)將屬性轉(zhuǎn)為 getter/setter,所以屬性必須在 dat...

    hss01248 評(píng)論0 收藏0
  • vue入坑筆記(持續(xù)更新)

    摘要:如果我們能把不同路由對應(yīng)的組件分割成不同的代碼塊,只在路由被訪問的時(shí)候才加載對應(yīng)的組件,這樣就更加高效了。這樣會(huì)大大提高首屏顯示的速度,但是可能其他的頁面的速度就會(huì)降下來。 一、 代碼分割,讓頁面按需加載,加快首屏速率 vue.js構(gòu)建單頁應(yīng)用雖然能通過路由來實(shí)現(xiàn)多頁面效果,但是實(shí)際上打包后所有的代碼都只有一個(gè)入口文件app.bundle.js,當(dāng)項(xiàng)目變得十分龐大的時(shí)候,app.bun...

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

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

0條評(píng)論

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