第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

bind 方法模擬時(shí)的arguments

我有些不太理解兩個(gè) arguments 的變化,

demo:

function?foo(x,y,z){
??this.b?=?100;
??return?this.a+x+y+z;
}

var?func?=?foo.bind({a:1},20);
func(3,4);

這個(gè)時(shí)候?qū)τ诮貓D右邊實(shí)現(xiàn)bind 模擬的代碼而言,

var?aArgs?=?Array.prototype.slice.call(arguments,1);??//此時(shí)的arguments[0]->{a:1}
?????????????????????????????????????????????????????//arguments[1]->20

而fBound 的匿名函數(shù)中

aArgs.concat(Array.propotype.slice.call(arguments))??//此時(shí)的arguments[0]->3
????????????????????????????????????????????????????//arguments[1]->4

我感覺這樣理解才是對(duì)的,這樣 concat 之后返回的是 [20,3,4]

但是我不太明白fBound 的匿名函數(shù)中的 arguments 是何時(shí)指向函數(shù)調(diào)用的?

正在回答

2 回答

非常認(rèn)真的總結(jié),很不錯(cuò)。加油哦。有問題可以微博艾特我@Bosn

0 回復(fù) 有任何疑惑可以回復(fù)我~

額, 自己犯傻了??!

自問自答之前先重申一下:標(biāo)識(shí)符 arguments 是指向 【實(shí)參】 對(duì)象的引用。

也就是說,必須 【在函數(shù)調(diào)用,傳入了實(shí)參時(shí),才有 arguments 對(duì)象】。

demo:

function?foo(x,y,z){
??this.b?=?100;
??return?this.a+x+y+z;
}
?
var?func?=?foo.mybind({a:1},20);??//因?yàn)?.bind()方法已存在,為了斷點(diǎn)調(diào)試,改為?.mybind()?方法
func(3,4);

其中,

var?func?=?foo.mybind({a:1},20);???//?此時(shí)全部實(shí)參為?[{a:1},20]

在Chrome 的控制臺(tái)下模擬了一下,注意兩點(diǎn):

  1. 此時(shí)call stack(紅色框) 里面是 第33 行調(diào)用 .mybind() 方法調(diào)用了第14行

  2. 第 20 行,也就是最后返回的函數(shù)的 arguments(藍(lán)色框) 也是[{a:1},20],但此時(shí)這個(gè)函數(shù) 【沒有調(diào)用】,沒有執(zhí)行也就沒有輸出效果。

http://img1.sycdn.imooc.com//555ae3a10001c0bc11280372.jpg

.mybind() 返回一個(gè)函數(shù),保存在 func 里面,現(xiàn)在 func 里面是 .bind() 方法返回的函數(shù),里面的內(nèi)容也就是這一段,

http://img1.sycdn.imooc.com//555ae13c0001aaa303520075.jpg

當(dāng)調(diào)用 func 函數(shù),或者說是在調(diào)用 .mybind() 方法的返回值時(shí),

func(3,4);??//?此時(shí)實(shí)參為?[3,4]

此時(shí)在Chrome 中斷點(diǎn),可以看到

  1. call stack(紅色框) 中第 34 行, func(3,4) 調(diào)用的是 fBound 方法,也就是 18-19 行的代碼

  2. 此時(shí)整個(gè) Local 的 arguments(藍(lán)色框) 都是[3,4] ,即使是被調(diào)用的函數(shù)外部(即第14行)的 arguments 也是[3,4]

  3. return?fToBind.apply();

    此時(shí)實(shí)際上是在間接調(diào)用 foo() 函數(shù),其參數(shù)分別為 oThis 和?aArgs.concat(Array.prototype.slice.call(arguments))

  4. 閉包(紫色框)中可以看到?oThis 和 aArgs 仍然存在

http://img1.sycdn.imooc.com//555ae8800001c9ef11400423.jpg

4 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
JavaScript深入淺出
  • 參與學(xué)習(xí)       281087    人
  • 解答問題       1054    個(gè)

由淺入深學(xué)習(xí)JS語言特性,且解析JS常見誤區(qū),從入門到掌握

進(jìn)入課程

bind 方法模擬時(shí)的arguments

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)