日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

javascript - 關于apply()與call()的問題

瀏覽:185日期:2023-02-23 11:40:34

問題描述

function sum(num1,num2) { return num1 + num2;}function callSum1(num1,num2) { return sum.apply(this,arguments);}function callSum2(num1,num2) { return sum.apply(this,[num1,num2]);}alert(callSum1(10,10));alert(callSum2(10,10));//call()例子就省略了

問:1.sum.apply(this,arguments)說的是對象sum調用apply方法,this指的是callSum()與sum()都是同一個作用域運行,arguments指的就是”sum1,sum2”?2.apply()與call()的在項目中應用價值是什么呢?

問題解答

回答1:

樓上寫的真復雜:)

聽我講講,題主疑惑的地方1:

function callSum1(num1,num2) { return sum.apply(this,arguments); // 這里的arguments和下面的[num1,num2]是同一個意思}function callSum2(num1,num2) { return sum.apply(this,[num1,num2]);}

arguments 是一個類似數(shù)組的對象, 對應于傳遞給函數(shù)的參數(shù)。arguments對象是所有函數(shù)中可用的局部變量。你可以使用arguments對象在函數(shù)中引用函數(shù)的參數(shù)。

PS:this的指向在函數(shù)定義的時候是確定不了的,只有函數(shù)執(zhí)行的時候才能確定this到底指向誰,實際上this的最終指向的是那個調用它的對象

2、call和apply應用價值(存在的意義):

作用都是為了改變函數(shù)運行時上下文而存在的。 即改變函數(shù)體內部this的指向'說白點,a有xx方法,b沒有。b可以問a借!'(這tm不就是繼承嘛~)

call和apply不同點:

接受參數(shù)方式不一樣。

如下:call接受的是連續(xù)參數(shù),apply接受的是數(shù)組參數(shù)。A.call(this, a,b,c,d)A.apply(this, [a,b,c,d])

一個傳送門:http://www.jianshu.com/p/a7b1...

回答2:

arguments是function內置屬性之一,表示函數(shù)數(shù)組對象,即 callSum1里的arguments 指代 num1和num2https://developer.mozilla.org...

apply 跟 call的價值在于,能夠使得指定函數(shù)里面的this指向特定的對象上,舉個例子,我們用document.querySelectorAll()獲取的dom其實是一個類數(shù)組對象,非數(shù)組,如果想要用數(shù)組的方法時,可以是這樣

var doms = document.querySelectorAll(’p’);[].forEach.call(doms, function(e){ //遍歷元素});

而apply 跟call主要區(qū)別在于參數(shù)格式,這個建議題主翻翻MDN。

回答3:

1.sum.apply(this,arguments)說的是對象sum調用apply方法,this指的是callSum()與sum()都是同一個作用域運行,arguments指的就是”sum1,sum2”?

2.apply()與call()的在項目中應用價值是什么呢?

針對 1 執(zhí)行結果兩個都返回 20 20

sum.apply(this,arguments) 指的是用apply來調用sum 指定sum執(zhí)行的時候的this為現(xiàn)在的這個this 后面的arguments是參數(shù)列表 是一個類數(shù)組對象,你可以簡單地當成數(shù)組對待。

sum.apply(this,[num1, num2]) 與上面類似。

關于arguments,發(fā)一張截圖你可能就會有感性的認識了

javascript - 關于apply()與call()的問題

以下是針對第二點的回答

欽點this

比較好理解 就是改變 this 指向 比如在 ajax 請求的 success 回調的時候

比如在vue開發(fā)的時候 如果沒有箭頭函數(shù) 得要用 var that = this 這樣暫存 this。 如果可以欽點this就沒這些問題

舉個栗子

function sayName(){ console.log(this.name); }var xiao_ming = { name: ’小明妹妹’}// 欽點 this sayName.call(xiao_ming);

javascript - 關于apply()與call()的問題

把類數(shù)組對象轉化成真丶數(shù)組

arguments 通過類數(shù)組對象的形式 保存著函數(shù)的參數(shù)列表 。

function sumAll(){ var argu = Array.prototype.slice.call(arguments); // 從 0 開始積、每次 sum + cur 作為下次的 sum return argu.reduce((sum, cur) => sum + cur, 0); }

javascript - 關于apply()與call()的問題

其實從這里可以窺見:執(zhí)行 slice 只需要對象具備 length 正確的下標 就可以正常執(zhí)行 并返回結果。

因為數(shù)組的很多方法都可以用在類數(shù)組對象上,因此類數(shù)組對象很多時候確實可以被認為就是數(shù)組。

// 聲明一個類數(shù)組對象 var a = { 0: ’hello’, 1: ’seg’, 2: ’ment’, 3: ’fault’, length: 4}// forEach Array.prototype.forEach.call(a, elem => console.log(elem)); // => 遍歷打印// reduce var helloSF = Array.prototype.reduce.call(a, (acc, cur) => acc + cur + ’ ’, ’’); console.log(helloSF); // => // 'hello seg ment fault '

javascript - 關于apply()與call()的問題

還可以做的更像數(shù)組

var a = { 0: ’hello’, 1: ’seg’, 2: ’ment’, 3: ’fault’, length: 4}a.__proto__ = Array.prototype; a.forEach(e => console.log(e)); Array.prototype.reduce.call(a, (acc, cur) => acc + cur + ’ ’, ’’);

javascript - 關于apply()與call()的問題

Object Really Like Array

實現(xiàn)偏函數(shù) Partial Function

跟數(shù)學上的偏函數(shù)類似,比如:

函數(shù) f(x, y) = x + y如果令 y = k 那么可以得到偏函數(shù) f(x, k) = x + k ( 或者這樣可能更好理解: f(x, 4) = x + 4 )

一般都是用 bind 來實現(xiàn)偏函數(shù)的。 不過 apply 和 call 和 bind 應該集中的講講。

function logger(type){ return console.log.bind(console, type); }

javascript - 關于apply()與call()的問題

用 apply 實現(xiàn)上述 logger 就是:

function logger2(type){ return function(){var argu = Array.prototype.slice.call(arguments); argu.unshift(type); console.log.apply(console, argu); }}

javascript - 關于apply()與call()的問題

高階函數(shù)和柯里化

高階函數(shù)一般指的是返回值是函數(shù)或者其參數(shù)是函數(shù)的函數(shù)。

setTimeout 是個很好的例子 它接受一個參數(shù)(一般是函數(shù)) 然后在一定時延后執(zhí)行它。 不過傳進去之后一般 this 就指向了 全局對象 window 如果想要欽點 this 就得用 call apply 和 bind

上面的 logger2 就做到了這點 返回了一個函數(shù)出去

關于柯里化 先看函數(shù) add

function add(x, y){ return a + b; }add(1, 2); // => // 3

如果參數(shù)能一個一個的傳 傳到第二個的時候就得出結果:

var add1 = add(1); add1(2); // => 3 add(3)(4); // => 7

第一次執(zhí)行返回了一個函數(shù),如果把 add 看成是數(shù)學意義上的函數(shù) 那就是 f(x, y) = x + y 我們執(zhí)行了一次 add(1) 得到 add1 其實就是令 x = 1 了,于是得到偏函數(shù)

f(1, y) = 1 + y

第二次再執(zhí)行 y 會得到實際值 算式就可以算出結果出來。

這其實是一步步消元的過程。

有什么用的?

我在函數(shù)式編程方面也才初學,還沒領會到精髓,唯一對柯里化體會的用處是 惰性求值 剛剛的運算在參數(shù)給齊之前不會運行 等到參數(shù)夠了就會算出結果。

大半夜不睡覺刷sf 只能想到這些了。。。。

回答4:

手動設置this作用域。

回答5:

百度一下你就知道。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲女同av| 国产成人久久精品一区二区三区| 国产精品久久久久久久久久久久久久久| 亚洲精品黄色| 日韩黄色av| 国产激情一区| 日本国产精品| 亚洲一区黄色| 欧美日韩亚洲一区二区三区在线| 国产情侣一区在线| 欧美在线综合| 欧美在线91| 欧美国产偷国产精品三区| 久久久人人人| 国产亚洲福利| 国产乱人伦丫前精品视频| 国产精品久久久一区二区| 丝袜诱惑一区二区| 首页亚洲欧美制服丝腿| 国产精品日本一区二区不卡视频| 精品亚洲自拍| 欧美在线影院| 国产伦理久久久久久妇女| 超碰在线99| 视频在线观看一区二区三区| 亚洲精品在线国产| 国产精品高清一区二区| 亚洲成人精品| 日韩av一二三| 日韩精品一区二区三区免费观影| 蜜臀久久99精品久久久久宅男| 国产精品99精品一区二区三区∴ | 亚洲精品第一| 电影91久久久| 天堂av在线一区| 久久av网站| 三级一区在线视频先锋| 国产精品多人| 激情综合网站| 国产黄色精品| 精品1区2区3区4区| 精品久久视频| 爽好多水快深点欧美视频| 狠狠久久伊人| 国产亚洲综合精品| 精品一区二区三区中文字幕| 综合激情视频| 国产91一区| 免费日韩成人| 国产精品试看| 欧美天堂视频| 国产精品久久777777毛茸茸| 日韩欧美精品| 国产毛片精品| 亚洲资源av| 六月婷婷综合| 国产精品欧美一区二区三区不卡| 亚洲欧美久久| 日本а中文在线天堂| 欧美一级一区| 中文字幕日韩高清在线| 伊人久久高清| 久久精品国产999大香线蕉| 日韩精品免费视频人成 | 日韩欧美综合| 日韩欧美激情电影| 午夜欧美理论片| 亚洲人成在线网站| 国产精品二区不卡| 国产精品一区二区精品| 亚洲精品影视| 视频一区二区不卡| 国产高清久久| 欧美~级网站不卡| 国产精品字幕| 国产网站在线| 国产高潮在线| 久久久久久自在自线| 91亚洲精品在看在线观看高清| 快she精品国产999| 久久国产电影| 中文字幕在线看片| 国产精品精品国产一区二区| 欧美一区网站| 久久国产三级| 日本aⅴ免费视频一区二区三区| 综合国产视频| 免费在线成人网| 一本一道久久a久久| 噜噜噜久久亚洲精品国产品小说| 夜夜嗨一区二区| 中日韩男男gay无套| 日韩视频中文| 久久av在线| 婷婷精品久久久久久久久久不卡| 久久精品二区三区| 亚洲二区精品| 9色国产精品| 蜜桃视频第一区免费观看| 蜜桃视频一区二区三区| 日韩高清不卡在线| 久久99久久久精品欧美| 久久精品国产亚洲一区二区三区| 国产精品原创| 婷婷激情综合| 久久国产88| 日韩中出av| 欧美极品中文字幕| 国产一区精品福利| 国产91精品对白在线播放| 午夜精品成人av| 婷婷激情一区| 美女精品一区| 欧美日本久久| 精品久久电影| 日韩精品导航| 欧美xxxx性| 日韩一区电影| se01亚洲视频 | 99久久精品费精品国产| 午夜日韩在线| 综合激情五月婷婷| 国产精品宾馆| 999久久久精品国产| 国产模特精品视频久久久久| 69堂免费精品视频在线播放| 国产精品调教视频| 亚洲天堂免费电影| av成人国产| 国产精品手机在线播放| 色婷婷色综合| 蜜桃传媒麻豆第一区在线观看| 91精品国产一区二区在线观看| 国产丝袜一区| 欧美天堂视频| 午夜日韩福利| 久久av免费| 99国产精品久久久久久久| 奇米狠狠一区二区三区| 成人亚洲欧美| 免费日韩精品中文字幕视频在线| 国产精品a久久久久| 在线人成日本视频| 亚洲小说春色综合另类电影| 久久精品国产99国产| 99久久九九| 欧美亚洲tv| 激情欧美一区| 老司机免费视频一区二区三区| 久久精品国产福利| 玖玖玖国产精品| 国产精品不卡| 亚洲精品护士| 久久国产免费| 国产精品激情电影| 午夜亚洲福利在线老司机| 精品资源在线| 日韩国产欧美在线播放| 日韩不卡免费高清视频| 国产欧美久久一区二区三区| 91综合网人人| 欧美视频一区| 午夜在线播放视频欧美| 国产精品久久久久蜜臀| 亚洲激情中文| 久久久久久一区二区| 欧美日本一区| 亚洲免费影院| 91精品xxx在线观看| 国产精品亲子伦av一区二区三区 | 老司机精品在线| 亚州欧美在线| 亚洲夜间福利| 精品精品99| 日本一区中文字幕| 97精品国产一区二区三区| 日韩精品一区二区三区中文在线 | 精品久久不卡| 国产探花一区| 日韩精品一区第一页| 日韩一区三区| 日韩av一二三| 中文精品在线| 日韩深夜视频| 麻豆精品蜜桃| 国产不卡精品在线| 国产欧美一区二区三区精品观看| 亚洲免费精品| 日韩欧美综合| 成人黄色av| 精品国产午夜肉伦伦影院| 久久精品亚洲人成影院 | 精品国产18久久久久久二百| 日韩成人午夜精品| 噜噜噜躁狠狠躁狠狠精品视频| 久久蜜桃av| 欧美一区久久久| 欧美国产专区| 国产精品美女| 亚洲男女自偷自拍|