摘要:執(zhí)行函數(shù)會(huì)返回一個(gè)遍歷器對(duì)象,每一次函數(shù)里面的都相當(dāng)一次遍歷器對(duì)象的方法,并且可以通過(guò)方法傳入自定義的來(lái)改變函數(shù)的行為。函數(shù)可以通過(guò)配合函數(shù)更輕松更優(yōu)雅的實(shí)現(xiàn)異步編程和控制流管理。它和構(gòu)造函數(shù)的不同點(diǎn)類的內(nèi)部定義的所有方法,都是不可枚舉的。
let const的命令
在ES6之前,聲明變量只能用var,var方式聲明變量其實(shí)是很不合理的,準(zhǔn)確的說(shuō),是因?yàn)镋S5里面沒(méi)有塊級(jí)作用域是很不合理的,甚至可以說(shuō)是一個(gè)語(yǔ)言層面的bug(這也是很多c++、java開(kāi)發(fā)人員看不懂,也瞧不起JS語(yǔ)言的劣勢(shì)之一)。沒(méi)有塊級(jí)作用域回來(lái)帶很多難以理解的問(wèn)題,比如for循環(huán)var變量泄露,變量覆蓋等問(wèn)題。let 聲明的變量擁有自己的塊級(jí)作用域,且修復(fù)了var聲明變量帶來(lái)的變量提升問(wèn)題。
箭頭函數(shù)當(dāng)要求動(dòng)態(tài)上下文的時(shí)候,就不能夠使用箭頭函數(shù)。也就是this的固定化
1、在使用=>定義函數(shù)的時(shí)候,this的指向是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象
2、不能夠用作構(gòu)造函數(shù),這就是說(shuō),不能夠使用new命令,否則就會(huì)拋出一個(gè)錯(cuò)誤
3、不能夠使用arguments對(duì)象
4、不能使用yield命令
這是一道當(dāng)年很困惑我的一道題不知道你在第一眼能不能看出其結(jié)果,this的指向總是讓人困擾,但是有了=>以后媽媽再也不用擔(dān)心你使用this了
Set是ES6引入的一種類似Array的新的數(shù)據(jù)結(jié)構(gòu),Set實(shí)例的成員類似于數(shù)組item成員,區(qū)別是Set實(shí)例的成員都是唯一,不重復(fù)的。這個(gè)特性可以輕松地實(shí)現(xiàn)數(shù)組去重。
Map是什么,有什么作用?Map是ES6引入的一種類似Object的新的數(shù)據(jù)結(jié)構(gòu),Map可以理解為是Object的超集,打破了以傳統(tǒng)鍵值對(duì)形式定義對(duì)象,對(duì)象的key不再局限于字符串,也可以是Object。可以更加全面的描述對(duì)象的屬性。
Proxy是什么,有什么作用?Proxy是ES6新增的一個(gè)構(gòu)造函數(shù),可以理解為JS語(yǔ)言的一個(gè)代理,用來(lái)改變JS默認(rèn)的一些語(yǔ)言行為,包括攔截默認(rèn)的get/set等底層方法,使得JS的使用自由度更高,可以最大限度的滿足開(kāi)發(fā)者的需求。比如通過(guò)攔截對(duì)象的get/set方法,可以輕松地定制自己想要的key或者value。下面的例子可以看到,隨便定義一個(gè)myOwnObj的key,都可以變成自己想要的函數(shù)。
Reflect是什么,有什么作用?Reflect是ES6引入的一個(gè)新的對(duì)象,他的主要作用有兩點(diǎn),一是將原生的一些零散分布在Object、Function或者全局函數(shù)里的方法(如apply、delete、get、set等等),統(tǒng)一整合到Reflect上,這樣可以更加方便更加統(tǒng)一的管理一些原生API。其次就是因?yàn)镻roxy可以改寫默認(rèn)的原生API,如果一旦原生API別改寫可能就找不到了,所以Reflect也可以起到備份原生API的作用,使得即使原生API被改寫了之后,也可以在被改寫之后的API用上默認(rèn)的API。
Iterator是什么,有什么作用?Iterator是ES6中一個(gè)很重要概念,它并不是對(duì)象,也不是任何一種數(shù)據(jù)類型。因?yàn)镋S6新增了Set、Map類型,他們和Array、Object類型很像,Array、Object都是可以遍歷的,但是Set、Map都不能用for循環(huán)遍歷,解決這個(gè)問(wèn)題有兩種方案,一種是為Set、Map多帶帶新增一個(gè)用來(lái)遍歷的API,另一種是為Set、Map、Array、Object新增一個(gè)統(tǒng)一的遍歷API,顯然,第二種更好,ES6也就順其自然的需要一種設(shè)計(jì)標(biāo)準(zhǔn),來(lái)統(tǒng)一所有可遍歷類型的遍歷方式。Iterator正是這樣一種標(biāo)準(zhǔn)。或者說(shuō)是一種規(guī)范理念。
就好像JavaScript是ECMAScript標(biāo)準(zhǔn)的一種具體實(shí)現(xiàn)一樣,Iterator標(biāo)準(zhǔn)的具體實(shí)現(xiàn)是Iterator遍歷器。Iterator標(biāo)準(zhǔn)規(guī)定,所有部署了key值為[Symbol.iterator],且[Symbol.iterator]的value是標(biāo)準(zhǔn)的Iterator接口函數(shù)(標(biāo)準(zhǔn)的Iterator接口函數(shù): 該函數(shù)必須返回一個(gè)對(duì)象,且對(duì)象中包含next方法,且執(zhí)行next()能返回包含value/done屬性的Iterator對(duì)象)的對(duì)象,都稱之為可遍歷對(duì)象,next()后返回的Iterator對(duì)象也就是Iterator遍歷器。
ES6的class可以看作只是一個(gè)語(yǔ)法糖,它的絕大部分功能,ES5都可以做到,新的class寫法只是讓對(duì)象原型的寫法更加清晰、更像面向?qū)ο缶幊痰恼Z(yǔ)法而已。
//定義類
class Point {
constructor(x,y) {
//構(gòu)造方法 this.x = x; //this關(guān)鍵字代表實(shí)例對(duì)象 this.y = y;
} toString() {
return "(" + this.x + "," + this.y + ")";
}
}
Promise是ES6引入的一個(gè)新的對(duì)象,他的主要作用是用來(lái)解決JS異步機(jī)制里,回調(diào)機(jī)制產(chǎn)生的“回調(diào)地獄”。它并不是什么突破性的API,只是封裝了異步回調(diào)形式,使得異步回調(diào)可以寫的更加優(yōu)雅,可讀性更高,而且可以鏈?zhǔn)秸{(diào)用。
promise對(duì)象的用法,手寫一個(gè)promisepromise是一個(gè)構(gòu)造函數(shù),下面是一個(gè)簡(jiǎn)單實(shí)例
var promise = new Promise((resolve,reject) => {
if (操作成功) { resolve(value) } else { reject(error) }
})
promise.then(function (value) {
// success
},function (value) {
// failure
})
for...in 和for...of有什么區(qū)別?ES6統(tǒng)一了遍歷標(biāo)準(zhǔn),制定了可遍歷對(duì)象,那么用什么方法去遍歷呢?答案就是用for...of。ES6規(guī)定,有所部署了載了Iterator接口的對(duì)象(可遍歷對(duì)象)都可以通過(guò)for...of去遍歷,而for..in僅僅可以遍歷對(duì)象。
這也就意味著,數(shù)組也可以用for...of遍歷,這極大地方便了數(shù)組的取值,且避免了很多程序用for..in去遍歷數(shù)組的惡習(xí)。
上面提到的擴(kuò)展運(yùn)算符本質(zhì)上也就是for..of循環(huán)的一種實(shí)現(xiàn)。
十八、Generator函數(shù)是什么,有什么作用?
答: 如果說(shuō)JavaScript是ECMAScript標(biāo)準(zhǔn)的一種具體實(shí)現(xiàn)、Iterator遍歷器是Iterator的具體實(shí)現(xiàn),那么Generator函數(shù)可以說(shuō)是Iterator接口的具體實(shí)現(xiàn)方式。
執(zhí)行Generator函數(shù)會(huì)返回一個(gè)遍歷器對(duì)象,每一次Generator函數(shù)里面的yield都相當(dāng)一次遍歷器對(duì)象的next()方法,并且可以通過(guò)next(value)方法傳入自定義的value,來(lái)改變Generator函數(shù)的行為。
Generator函數(shù)可以通過(guò)配合Thunk 函數(shù)更輕松更優(yōu)雅的實(shí)現(xiàn)異步編程和控制流管理。
答: async函數(shù)可以理解為內(nèi)置自動(dòng)執(zhí)行器的Generator函數(shù)語(yǔ)法糖,它配合ES6的Promise近乎完美的實(shí)現(xiàn)了異步編程解決方案。
Class、extends是什么,有什么作用?答: ES6 的class可以看作只是一個(gè)ES5生成實(shí)例對(duì)象的構(gòu)造函數(shù)的語(yǔ)法糖。它參考了java語(yǔ)言,定義了一個(gè)類的概念,讓對(duì)象原型寫法更加清晰,對(duì)象實(shí)例化更像是一種面向?qū)ο缶幊獭lass類可以通過(guò)extends實(shí)現(xiàn)繼承。它和ES5構(gòu)造函數(shù)的不同點(diǎn):
a. 類的內(nèi)部定義的所有方法,都是不可枚舉的。
答: module、export、import是ES6用來(lái)統(tǒng)一前端模塊化方案的設(shè)計(jì)思路和實(shí)現(xiàn)方案。export、import的出現(xiàn)統(tǒng)一了前端模塊化的實(shí)現(xiàn)方案,整合規(guī)范了瀏覽器/服務(wù)端的模塊化方法,用來(lái)取代傳統(tǒng)的AMD/CMD、requireJS、seaJS、commondJS等等一系列前端模塊不同的實(shí)現(xiàn)方案,使前端模塊化更加統(tǒng)一規(guī)范,JS也能更加能實(shí)現(xiàn)大型的應(yīng)用程序開(kāi)發(fā)。
import引入的模塊是靜態(tài)加載(編譯階段加載)而不是動(dòng)態(tài)加載(運(yùn)行時(shí)加載)。
import引入export導(dǎo)出的接口值是動(dòng)態(tài)綁定關(guān)系,即通過(guò)該接口,可以取到模塊內(nèi)部實(shí)時(shí)的值。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/105588.html
摘要:這也是前端面試經(jīng)常詢問(wèn)的問(wèn)題,經(jīng)常問(wèn)你出現(xiàn)了哪些新的特性,平時(shí)又使用過(guò)那些。 這也是前端面試經(jīng)常詢問(wèn)的問(wèn)題,經(jīng)常問(wèn)你es6出現(xiàn)了哪些新的特性,平時(shí)又使用過(guò)那些。在編寫此教程的時(shí)候,第一句話往往就是面試常常問(wèn)到的地方,然后后面就是他的詳細(xì)解釋,面試要求的內(nèi)容我會(huì)用*標(biāo)記出來(lái)。寫技術(shù)文檔是真的累啊,雖然是看別人的文檔,但是你得看很多,而且還得自己總結(jié)啊。所以說(shuō)要是覺(jué)得對(duì)你有用還是幫我點(diǎn)個(gè)s...
摘要:這也是前端面試經(jīng)常詢問(wèn)的問(wèn)題,經(jīng)常問(wèn)你出現(xiàn)了哪些新的特性,平時(shí)又使用過(guò)那些。 這也是前端面試經(jīng)常詢問(wèn)的問(wèn)題,經(jīng)常問(wèn)你es6出現(xiàn)了哪些新的特性,平時(shí)又使用過(guò)那些。在編寫此教程的時(shí)候,第一句話往往就是面試常常問(wèn)到的地方,然后后面就是他的詳細(xì)解釋,面試要求的內(nèi)容我會(huì)用*標(biāo)記出來(lái)。寫技術(shù)文檔是真的累啊,雖然是看別人的文檔,但是你得看很多,而且還得自己總結(jié)啊。所以說(shuō)要是覺(jué)得對(duì)你有用還是幫我點(diǎn)個(gè)s...
摘要:執(zhí)行,輸出,宏任務(wù)執(zhí)行結(jié)束。到此為止,第一輪事件循環(huán)結(jié)束。參考入門阮一峰系列之我們來(lái)聊聊一道關(guān)于應(yīng)用的面試題阿里前端測(cè)試題關(guān)于中函數(shù)的理解與應(yīng)用這一次,徹底弄懂執(zhí)行機(jī)制一個(gè)面試題原生的所有方法介紹附一道應(yīng)用場(chǎng)景題目異步流程控制 說(shuō)明 最近在復(fù)習(xí) Promise 的知識(shí),所以就做了一些題,這里挑出幾道題,大家一起看看吧。 題目一 const promise = new Promise((...
摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開(kāi)發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...
閱讀 2113·2021-11-16 11:45
閱讀 1184·2021-10-22 09:53
閱讀 4002·2021-09-07 10:26
閱讀 1209·2021-09-06 15:00
閱讀 2073·2019-08-28 18:09
閱讀 2795·2019-08-26 14:06
閱讀 3934·2019-08-26 13:48
閱讀 1296·2019-08-26 12:11