亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

JS面試

CoreDump / 2193人閱讀

摘要:的作用是,創(chuàng)建一個(gè)新函數(shù),稱(chēng)為綁定函數(shù)。而這句話(huà)的效果相當(dāng)于下面的代碼對(duì)方法的理解在看別人代碼時(shí),發(fā)現(xiàn)有這么個(gè)寫(xiě)法,這到底是什么意思呢方法可從已有的數(shù)組中返回選定的元素。該方法并不會(huì)修改數(shù)組,而是返回一個(gè)子數(shù)組。

1.document.querySelectorAll賦給其它變量時(shí), 為什么要.bind(document)?

阮一峰的博客提到$的替代方法:

var $ = document.querySelectorAll.bind(document);

回答(1):我的理解是this的指向問(wèn)題。querySelectorAll是document下的一個(gè)方法,附值給select后,select已經(jīng)是window下的一個(gè)屬性,此時(shí),this已經(jīng)不再是document,而window下沒(méi)有querySelectorAll方法,所以會(huì)報(bào)錯(cuò);var select = document.querySelectorAll.bind(document),能保證調(diào)用select()時(shí)this永遠(yuǎn)指向document。

回答(2):這個(gè)問(wèn)題其實(shí)和querySelectorAll沒(méi)什么關(guān)系。document是類(lèi)的一個(gè)實(shí)例,而querySelectorAll是原型鏈上的方法。類(lèi)比到普通的類(lèi)和原型方法就很好理解了吧。

通過(guò)實(shí)例來(lái)運(yùn)行原型鏈上的方法時(shí),解釋器會(huì)自動(dòng)將this指向那個(gè)實(shí)例,但是直接這樣var select = document.querySelectorAll;,你的變量?jī)H僅是指向了原型鏈上的那個(gè)函數(shù),而沒(méi)有綁定this指針,所以你才需要在外面手動(dòng)綁定一下指針。

回答(3):因?yàn)閐ocument.querySelectorAll是通過(guò)document這個(gè)對(duì)象去調(diào)用querySelectorAll的時(shí)候,函數(shù)的環(huán)境變量里this會(huì)指向document,假設(shè)querySelectorAll含有this的操作的話(huà),那么this就會(huì)指代document。

而當(dāng)你執(zhí)行var select = document.querySelectorAll; 的時(shí)候,select所得到的是querySelector這個(gè)引用,但是此時(shí)如果直接通過(guò)select去調(diào)用的話(huà),也就是select("span"); ,由于select(querySelectorAll)直接調(diào)用的話(huà),this會(huì)自動(dòng)指向window,所以就會(huì)出錯(cuò)。

bind的作用是,創(chuàng)建一個(gè)新函數(shù),稱(chēng)為綁定函數(shù)。當(dāng)調(diào)用這個(gè)綁定函數(shù)時(shí),綁定函數(shù)會(huì)以創(chuàng)建它時(shí)傳入 bind()方法的第一個(gè)參數(shù)作為 this,傳入 bind() 方法的第二個(gè)以及以后的參數(shù)。
而這句話(huà)var $ = document.querySelectorAll.bind(document);的效果相當(dāng)于下面的代碼

var $ = function(document) {
    return function() {
        return document.querySelectorAll.call(document, arguments);
    }
}
2.對(duì)Array.prototype.slice.call()方法的理解

在看別人代碼時(shí),發(fā)現(xiàn)有這么個(gè)寫(xiě)法:[].slice.call(arguments, 0),這到底是什么意思呢?

(1)slice() 方法可從已有的數(shù)組中返回選定的元素。

start:必需。規(guī)定從何處開(kāi)始選取。如果是負(fù)數(shù),那么它規(guī)定從數(shù)組尾部開(kāi)始算起的位置。也就是說(shuō),-1 指最后一個(gè)元素,-2 指倒數(shù)第二個(gè)元素,以此類(lèi)推。

end:可選。規(guī)定從何處結(jié)束選取。該參數(shù)是數(shù)組片斷結(jié)束處的數(shù)組下標(biāo)。如果沒(méi)有指定該參數(shù),那么切分的數(shù)組包含從 start 到數(shù)組結(jié)束的所有元素。如果這個(gè)參數(shù)是負(fù)數(shù),那么它規(guī)定的是從數(shù)組尾部開(kāi)始算起的元素。

返回一個(gè)新的數(shù)組,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。該方法并不會(huì)修改數(shù)組,而是返回一個(gè)子數(shù)組。

(2)call()和apply()方法都是在特定的作用域中調(diào)用函數(shù),實(shí)際上等于設(shè)置函數(shù)體內(nèi)this對(duì)象的值。apply和call方法的第一個(gè)參數(shù)都是特定的作用域第二個(gè)參數(shù)不同,apply第二個(gè)參數(shù)可以是Array的實(shí)例,也可以是arguments對(duì)象。call方法需要逐個(gè)列出需要傳遞的參數(shù)。

(3)arguments對(duì)象指數(shù)與數(shù)組類(lèi)似(它并不是Array的實(shí)例),但是可以使用方括號(hào)語(yǔ)法訪(fǎng)問(wèn)每一個(gè)元素,使用length來(lái)確定傳遞進(jìn)來(lái)多少個(gè)參數(shù)。

(4)Array.prototype.slice.call()可以理解為:改變數(shù)組的slice方法的作用域,在特定作用域中去調(diào)用slice方法,call()方法的第二個(gè)參數(shù)表示傳遞給slice的參數(shù)即截取數(shù)組的起始位置。

原理:

Array.prototype.slice.call(arguments)能將具有l(wèi)ength屬性的對(duì)象(key值為數(shù)字)轉(zhuǎn)成數(shù)組。[]是Array的示例,所以可以直接使用[].slice()方法。

var obj = {0:"hello",1:"world",length:2};
console.log(Array.prototype.slice.call(obj,0));//["hello", "world"]

沒(méi)有l(wèi)ength屬性的對(duì)象

var obj = {0:"hello",1:"world"};//沒(méi)有l(wèi)ength屬性
console.log(Array.prototype.slice.call(obj,0));//[]

可以借用Array.prototype.slice方法的對(duì)象要滿(mǎn)足一下兩個(gè)條件:

對(duì)象本身要可以存取屬性

對(duì)象的length屬性可讀寫(xiě)

3.在 JavaScript 中, true && expression 總是會(huì)評(píng)估為 expression ,而 false && expression 總是執(zhí)行為 false 。
console.log(true && "expression") 
console.log(false && "expression")

輸出:
expression
false

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/95464.html

相關(guān)文章

  • 前端最強(qiáng)面經(jīng)匯總

    摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒(méi)有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來(lái)而只能獲取元素屬性中的樣式。因此對(duì)于一個(gè)光禿禿的元素,方法返回對(duì)象中屬性值如果有就是據(jù)我測(cè)試不同環(huán)境結(jié)果可能有差異而就是。 花了很長(zhǎng)時(shí)間整理的前端面試資源,喜歡請(qǐng)大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...

    wangjuntytl 評(píng)論0 收藏0
  • 你不能錯(cuò)過(guò)的前端面試題合集

    摘要:收集的一些前端面試題從面試題發(fā)現(xiàn)不足,進(jìn)而查漏補(bǔ)缺,比通過(guò)面試更難得及各大互聯(lián)網(wǎng)公司前端筆試面試題篇及各大互聯(lián)網(wǎng)公司前端筆試面試題篇面試題個(gè)和個(gè)經(jīng)典面試題前端開(kāi)發(fā)面試題如何面試前端工程師很重要個(gè)變態(tài)題解析如何通過(guò)餓了么面試輕 收集的一些前端面試題 從面試題發(fā)現(xiàn)不足,進(jìn)而查漏補(bǔ)缺,比通過(guò)面試更難得 1 BAT及各大互聯(lián)網(wǎng)公司2014前端筆試面試題--Html,Css篇 2 BAT...

    ninefive 評(píng)論0 收藏0
  • 你不能錯(cuò)過(guò)的前端面試題合集

    摘要:收集的一些前端面試題從面試題發(fā)現(xiàn)不足,進(jìn)而查漏補(bǔ)缺,比通過(guò)面試更難得及各大互聯(lián)網(wǎng)公司前端筆試面試題篇及各大互聯(lián)網(wǎng)公司前端筆試面試題篇面試題個(gè)和個(gè)經(jīng)典面試題前端開(kāi)發(fā)面試題如何面試前端工程師很重要個(gè)變態(tài)題解析如何通過(guò)餓了么面試輕 收集的一些前端面試題 從面試題發(fā)現(xiàn)不足,進(jìn)而查漏補(bǔ)缺,比通過(guò)面試更難得 1 BAT及各大互聯(lián)網(wǎng)公司2014前端筆試面試題--Html,Css篇 2 BAT...

    darkbaby123 評(píng)論0 收藏0
  • Python面試經(jīng)驗(yàn)總結(jié),面試一時(shí)爽,一直面試一直爽!

    摘要:面試的心得體會(huì)簡(jiǎn)歷制作我做了兩份簡(jiǎn)歷,用兩個(gè)手機(jī)賬號(hào),兩個(gè)簡(jiǎn)歷名字,分別在各個(gè)招聘網(wǎng)站投了雙份簡(jiǎn)歷,一個(gè)是數(shù)據(jù)分析的簡(jiǎn)歷一個(gè)是全棧開(kāi)發(fā)的簡(jiǎn)歷,我真正接觸快年,不管是學(xué)習(xí)還是工作學(xué)到的東西,這兩年大概掌握了前端爬蟲(chóng)數(shù)據(jù)分析機(jī)器學(xué)習(xí)技術(shù), showImg(https://upload-images.jianshu.io/upload_images/13090773-b96aac7e974c...

    gxyz 評(píng)論0 收藏0
  • 2018.11.19秋招末第二波前端實(shí)習(xí)/校招小結(jié)

    摘要:背景個(gè)人背景就讀于東北某普通二本院校計(jì)算機(jī)軟件工程專(zhuān)業(yè),現(xiàn)大四,北京實(shí)習(xí)前端方向,自學(xué),技術(shù)棧時(shí)間背景大概是在月日準(zhǔn)備好簡(jiǎn)歷開(kāi)始投遞秋招差不多已經(jīng)結(jié)束招聘崗位不多,投遞對(duì)象為大一些的互聯(lián)網(wǎng)公司事件背景第一個(gè)入職的是好未來(lái)的前端實(shí)習(xí)崗,待遇工 背景 個(gè)人背景 就讀于東北某普通二本院校計(jì)算機(jī)軟件工程專(zhuān)業(yè),現(xiàn)大四,北京實(shí)習(xí) 前端方向,自學(xué),vue技術(shù)棧 時(shí)間背景 大概是在11月9日準(zhǔn)備...

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

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

0條評(píng)論

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