摘要:雖然現(xiàn)在還需要借助的力量但未來(lái)一定是屬于。將類(lèi)引入了,大大簡(jiǎn)化了原先復(fù)雜的工作從前要實(shí)現(xiàn)繼承得多麻煩工廠(chǎng)模式無(wú)法解決對(duì)象識(shí)別,構(gòu)造函數(shù)模式內(nèi)存浪費(fèi),原型模式私有方法還要結(jié)合構(gòu)造模式定義實(shí)例實(shí)現(xiàn)類(lèi)的繼承,我要用到繼承類(lèi)可以重寫(xiě)父類(lèi)的方法
雖然現(xiàn)在還需要借助babel的力量但未來(lái)一定是屬于ES6。(那ES7?-_-|||)
let在ES6之前javascript只有兩種作用域,即全局作用域和函數(shù)作用域,let的出現(xiàn)彌補(bǔ)JS了沒(méi)有塊作用域的痛點(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做一下對(duì)比
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語(yǔ)句中的var mew = "..."相當(dāng)于覆蓋了函數(shù)中第一個(gè)mew(即函數(shù)作用域中的)所以在次輸出mew是"..."
應(yīng)用上述例子中,通過(guò)let的使用可以避免變量被不必要地覆蓋
讓我們?cè)倏匆粋€(gè)栗子:
var a = [] for (var i = 0; i < 5; i++) { a[i] = function () { console.log(i) } } a[3]() // 5
為了輸出3,通常會(huì)使用閉包來(lái)處理
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
這不僅使代碼變得冗長(zhǎng)了不少,而且的外層可以訪(fǎng)問(wèn)到i(說(shuō)明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ù)的使用可以使書(shū)寫(xiě)更為簡(jiǎn)練
計(jì)算數(shù)組各項(xiàng)平方let ary = [1,2,3,5] let res = ary.map(function(item){return item*item}) //[1, 4, 9, 25]
使用箭頭函數(shù)可以簡(jiǎn)化書(shū)寫(xiě)
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)一步簡(jiǎn)化成:
let ary = [1,2,3,5] let res = ary.map(item => item * item ) //[1, 4, 9, 25]模板字符串
模版字符串是對(duì)字符串拼接的改進(jìn),以往輸出帶有變量的語(yǔ)句時(shí),我們采用字符串拼接的方式,而模板字符串可以在字符串中直接使用變量,即簡(jiǎn)化書(shū)寫(xiě)同時(shí)也降低出錯(cuò)的風(fēng)險(xiǎn)
let name = "Yoda" console.log("My name is " + name) // console.log(`My name is ${name}`) //模板字符串
模板字符串使用反引號(hào) ( ) 來(lái)代替普通字符串中的用雙引號(hào)和單引號(hào);
模板字符串使用包含特定語(yǔ)法(${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(類(lèi))與繼承
總所周知,js的原型鏈繼承向來(lái)以難以理解外加坑多著稱(chēng)
(構(gòu)造函數(shù),原型對(duì)象,實(shí)例對(duì)象它們之間剪不斷理還亂的關(guān)系,如果再加上繼承,prototype和[[prototype]]的指向@_@說(shuō)多了都是淚?。?br>由于JS中沒(méi)有類(lèi)的概念,許多初學(xué)者都掉坑原型鏈之中。
ES6將類(lèi)引入了,大大簡(jiǎn)化了原先復(fù)雜的工作(從前要實(shí)現(xiàn)繼承得多麻煩:工廠(chǎng)模式無(wú)法解決對(duì)象識(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)類(lèi)的繼承,我要用到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"
繼承類(lèi)可以重寫(xiě)父類(lèi)的方法:
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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/80101.html
摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。異步編程入門(mén)的全稱(chēng)是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開(kāi)發(fā)的科普類(lèi)文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門(mén)教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...
摘要:前端日?qǐng)?bào)精選大前端公共知識(shí)梳理這些知識(shí)你都掌握了嗎以及在項(xiàng)目中的實(shí)踐深入貫徹閉包思想,全面理解閉包形成過(guò)程重溫核心概念和基本用法前端學(xué)習(xí)筆記自定義元素教程阮一峰的網(wǎng)絡(luò)日志中文譯回調(diào)是什么鬼掘金譯年,一個(gè)開(kāi)發(fā)者的好習(xí)慣知乎專(zhuān) 2017-06-23 前端日?qǐng)?bào) 精選 大前端公共知識(shí)梳理:這些知識(shí)你都掌握了嗎?Immutable.js 以及在 react+redux 項(xiàng)目中的實(shí)踐深入貫徹閉包思...
摘要:謝謝大大指出的關(guān)于中用的不到位的錯(cuò)誤,貼上大大推薦的文章中的菜鳥(niǎo)和高階錯(cuò)誤,文章很詳細(xì)說(shuō)明了一些使用中的錯(cuò)誤和指導(dǎo)。另外更正內(nèi)容在后面補(bǔ)充。從開(kāi)始說(shuō)到異步流程控制,之前用的比較多的是的。 showImg(https://segmentfault.com/img/remote/1460000006771934); 謝謝n?i?g?h?t?i?r?e?大大指出的關(guān)于Promise中catc...
摘要:同源策略同源策略是一種約定,由公司年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到等攻擊。 一、Vue變化檢測(cè) 背景 初始化對(duì)象,屬性未知;某些事件觸發(fā)時(shí),對(duì)象改變(新增屬性),Vue監(jiān)聽(tīng)不到 原因 Vue.js 不能檢測(cè)到對(duì)象屬性的添加或刪除,因?yàn)閂ue.js 在初始化實(shí)例時(shí)將屬性轉(zhuǎn)為 getter/setter,所以屬性必須在 dat...
摘要:如果我們能把不同路由對(duì)應(yīng)的組件分割成不同的代碼塊,只在路由被訪(fǎng)問(wèn)的時(shí)候才加載對(duì)應(yīng)的組件,這樣就更加高效了。這樣會(huì)大大提高首屏顯示的速度,但是可能其他的頁(yè)面的速度就會(huì)降下來(lái)。 一、 代碼分割,讓頁(yè)面按需加載,加快首屏速率 vue.js構(gòu)建單頁(yè)應(yīng)用雖然能通過(guò)路由來(lái)實(shí)現(xiàn)多頁(yè)面效果,但是實(shí)際上打包后所有的代碼都只有一個(gè)入口文件app.bundle.js,當(dāng)項(xiàng)目變得十分龐大的時(shí)候,app.bun...
閱讀 2570·2021-11-11 16:54
閱讀 2810·2021-09-26 09:47
閱讀 4082·2021-09-08 09:36
閱讀 2851·2021-07-25 21:37
閱讀 1001·2019-08-30 15:54
閱讀 2616·2019-08-30 14:22
閱讀 3358·2019-08-30 13:57
閱讀 2918·2019-08-29 17:17