摘要:和方法大作用致相同,不同的方法接受的參數(shù),必須要明確所有要處理的參數(shù),也就是說,參數(shù)必須要逐個(gè)列舉,而方法可以選擇數(shù)組作為參數(shù),因此可以在具體的環(huán)境中,看看是選擇還是方法。
在函數(shù)內(nèi)部有著一個(gè)名叫arguments的類數(shù)組對(duì)象,內(nèi)部包含著傳入函數(shù)的所有參數(shù),在arguments對(duì)象中,有一個(gè)名叫callee的屬性,其作用可見下面這個(gè)階乘的栗子:
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); //這里也可以寫成如下方式 return num*arguments.callee(num-1); } } console.log(factorial(5))//120
可以看到的是,arguments.callee這個(gè)屬性作為一個(gè)指針指向了擁有arguments對(duì)象的函數(shù),也可以認(rèn)為是當(dāng)前正在執(zhí)行的函數(shù),而且可以消除與函數(shù)名factorial的耦合,不過值得注意的是,在ES5的嚴(yán)格模式下,調(diào)用arguments.callee方法會(huì)報(bào)錯(cuò)。
函數(shù)內(nèi)部還有一個(gè)對(duì)象,就是我們所熟悉的this對(duì)象,this對(duì)象引用的是函數(shù)執(zhí)行的環(huán)境對(duì)象,簡(jiǎn)單來說,this總是指向函數(shù)的直接調(diào)用者,而非間接調(diào)用者,在對(duì)象中,如果有new關(guān)鍵字,this指向new出來的那個(gè)對(duì)象。
在函數(shù)對(duì)象中,有個(gè)屬性名為caller,這個(gè)屬性作為一個(gè)引用,保存著調(diào)用當(dāng)前函數(shù)的其他函數(shù)的引用,如下
(function(){ bar();//function (){bar();} })(); function bar(){ console.log(bar.caller)//arguments.callee.caller }
可以看到的是,匿名函數(shù)內(nèi)部調(diào)用了bar函數(shù),在bar函數(shù)內(nèi)部,因?yàn)?bar.calller指向了調(diào)用bar的匿名函數(shù),所以執(zhí)行bar.caller就等于匿名函數(shù)的源代碼,同callee一樣的是,在ES5中訪問caller屬性會(huì)報(bào)錯(cuò)。
函數(shù)內(nèi)部除了以上容易混淆的屬性以外,還有些方法有時(shí)候也會(huì)讓人比較困惑,例如call跟apply,show the code
function add(a,b){ return a+b; } function foo(a,b){ console.log(add.call(this,a,b)) } function bar(a,b){ console.log(add.apply(this,[a,b])) } foo(20,20)//40 bar(20,20)//40
可以看到的是,call和apply兩個(gè)方法作用都是在特定的作用域上面調(diào)用函數(shù),換句話說,就是改變函數(shù)體內(nèi)this指向,在foo和bar函數(shù)中,我們利用call和apply將函數(shù)的this值綁定到add函數(shù)上,因此它們便可以對(duì)內(nèi)部的參數(shù)執(zhí)行add函數(shù)里面的加法操作。
call和apply方法大作用致相同,不同的方法接受的參數(shù),call必須要明確所有要處理的參數(shù),也就是說,參數(shù)必須要逐個(gè)列舉,而apply方法可以選擇數(shù)組作為參數(shù),因此可以在具體的環(huán)境中,看看是選擇call還是apply方法。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84268.html
摘要:中函數(shù)是一等公民,所有的函數(shù)實(shí)際上是一個(gè)對(duì)象,與其他引用類型一樣擁有著屬性和方法,也可以被外界或者自身調(diào)用,也可以像傳遞參數(shù)一樣將函數(shù)傳遞給另一個(gè)函數(shù)。中函數(shù)沒有重載的概念,當(dāng)定義兩個(gè)同名函數(shù)的時(shí)候,前一個(gè)函數(shù)會(huì)被覆蓋掉,舉個(gè)栗子。 JavaScript中函數(shù)是一等公民,所有的函數(shù)實(shí)際上是一個(gè)Function對(duì)象,與其他引用類型一樣擁有著屬性和方法,也可以被外界或者自身調(diào)用,也可以像傳...
摘要:另外如果為負(fù)數(shù),則表示從字符串尾部開始算起。將要搜尋的子字符串。從當(dāng)前字符串的哪個(gè)索引位置開始搜尋子字符串默認(rèn)為。否則則會(huì)返回一個(gè)數(shù)組,數(shù)組中存放所有符合要求的子字符串,并且沒有和屬性。 原文鏈接 JavaScript 字符串用于存儲(chǔ)和處理文本。因此在編寫 JS 代碼之時(shí)她總?cè)缬半S形,在你處理用戶的輸入數(shù)據(jù)的時(shí)候,在讀取或設(shè)置 DOM 對(duì)象的屬性時(shí),在操作 Cookie 時(shí),在轉(zhuǎn)換各種...
摘要:極簡(jiǎn)爬蟲攻防戰(zhàn)紀(jì)要爬蟲是構(gòu)建搜索引擎的基礎(chǔ)負(fù)責(zé)抓取網(wǎng)頁(yè)信息并對(duì)網(wǎng)頁(yè)識(shí)別分類及過濾。爬蟲方終于鎖定了第一場(chǎng)戰(zhàn)役的勝局由于斷崖式技術(shù)的出現(xiàn),反爬方在瀏覽器識(shí)別戰(zhàn)役上望風(fēng)披靡。經(jīng)過反爬方的精心運(yùn)作,逐漸有效削弱了敵方的攻勢(shì)。 極簡(jiǎn)爬蟲攻防戰(zhàn)紀(jì)要 ? ??爬蟲是構(gòu)建搜索引擎的基礎(chǔ), 負(fù)責(zé)抓取網(wǎng)頁(yè)信息并對(duì)網(wǎng)頁(yè)識(shí)別、分類及過濾。我們熟識(shí)的電商、搜索、新聞及各大門戶網(wǎng)站都有強(qiáng)大的爬蟲集群在每...
摘要:流程創(chuàng)建一個(gè)文件獲取當(dāng)前的活動(dòng)標(biāo)簽通過行列坐標(biāo)獲取單元格,并向其插入數(shù)據(jù)這里有種方式生成文件并輸入代碼預(yù)覽等價(jià)于除非是根目錄設(shè)置當(dāng)前腳本所在目錄實(shí)例化類獲取當(dāng)前活動(dòng)標(biāo)簽填充數(shù)據(jù)方式一姓名性別年齡射可可男男男填充數(shù) 流程 創(chuàng)建一個(gè)excel文件 獲取當(dāng)前的活動(dòng)sheet標(biāo)簽 通過行列坐標(biāo)獲取單元格,并向其插入數(shù)據(jù)(這里有2種方式) 生成文件并輸入showImg(https://seg...
摘要:更多資源請(qǐng)文章轉(zhuǎn)自月份前端資源分享的作用數(shù)組元素隨機(jī)化排序算法實(shí)現(xiàn)學(xué)習(xí)筆記數(shù)組隨機(jī)排序個(gè)變態(tài)題解析上個(gè)變態(tài)題解析下中的數(shù)字前端開發(fā)筆記本過目不忘正則表達(dá)式聊一聊前端存儲(chǔ)那些事兒一鍵分享到各種寫給剛?cè)腴T的前端工程師的前后端交互指南物聯(lián)網(wǎng)世界的 更多資源請(qǐng)Star:https://github.com/maidishike... 文章轉(zhuǎn)自:https://github.com/jsfr...
閱讀 740·2021-11-24 10:19
閱讀 1126·2021-09-13 10:23
閱讀 3445·2021-09-06 15:15
閱讀 1788·2019-08-30 14:09
閱讀 1702·2019-08-30 11:15
閱讀 1851·2019-08-29 18:44
閱讀 949·2019-08-29 16:34
閱讀 2470·2019-08-29 12:46