日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript arguments

發布時間:2023/12/2 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript arguments 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

此文為轉載文章:

什么是arguments

arguments 是是JavaScript里的一個內置對象,它很古怪,也經常被人所忽視,但實際上是很重要的。所有主要的js函數庫都利用了arguments對象。所以agruments對象對于javascript程序員來說是必需熟悉的。

所有的函數都有屬于自己的一個arguments對象,它包括了函所要調用的參數。他不是一個數組,如果用typeof arguments,返回的是’object’。雖然我們可以用調用數據的方法來調用arguments。比如length,還有index方法。但是數 組的push和pop對象是不適用的。

創建一個靈活的函數

看起來貌似argument對象使用起來十分有限,但是實際上它是一個非常有用的對象。你可以通過使用argument對象讓函數能夠調用數量不定 的參數。在Dean Edwards的base2庫里有個格式化的函數,展示了這個靈活性。

function format(string) {???

? var args = arguments;???

? var pattern = new RegExp(“%([1-" + arguments.length + "])”, ”g”);???

? return String(string).replace(pattern, function(match, index) {???

??? return args[index];???

? });???

};

我們提供了一個模板字符串,你可以用”%1”到“%9”給返回值添加一個占位符。然后提供給九個其他參數插入。

format(“And the %1 want to know whose %2 you %3″, ”papers”, ”shirt”, ”wear”);

上面的代碼將返回:And the papers want to know whose shirt you wear" .

有件事情我們需要注意下,在定義函數的時候,我們只規定了一個參數,string。Javascript允許我們傳遞任何數量的參數到一個函數里,不管怎么定義這個函數。Arguments對象對這些都是允許的。

把arguments對象轉換成一個真正的數組

雖然arguments對象不是一個真正的javascript數組,但是我們還是可以輕易的把它轉換成標準的數據 ,然后進行數組操作。

var args = Array.prototype.slice.call(arguments);

那么現在這個變量args就含有一個含有函數所有參數的標準javascript數組對象。

通過預置的arguments對象創建函數

Arguments對象允許我們去執行所有類型的javascript方法。這邊附上一個makeFunc函數的定義。這個函數允許我們去提供一個函數引用和這個函數的所有參數。他將返回一個匿名函數去調用你規定的函數,也提供了匿名函數調用時所附帶的參數。

function makeFunc() {???

? var args = Array.prototype.slice.call(arguments);???

? var func = args.shift();???

? return function() {???

??? return func.apply(null, args.concat(Array.prototype.slice.call(arguments)));???

? };???

}

第一個argument對象給makeFunc提供了你想調用的函數的引用。他是從arguments數組里移除的。然后makeFunc返回了一個匿名函數去運行規定的方法。

第一個應用的argument指向了函數調用的范圍,主要是函數內部關鍵部分所指向的。我們先保持這個為null。第二個arguments是一個 數組,會為這個函數轉變為arguments對象。makeFunc把原始的數組值串聯到arguments對象里提供給匿名函數和所調用函數的數組。

你需要輸出一個模板總是相同的位置,這樣就可以不用總是在每次引用模板的時候調用format函數。你可以使用makeFunc的通用功能去返回可以調用format然后自動補充模板的函數。

var majorTom = makeFunc(format, ”This is Major Tom to ground control. I’m %1.”);

你可以像這樣調用majorTom函數:

majorTom(“stepping through the door”);???

majorTom(“floating in a most peculiar way”);

每一次你調用majorTom,它會同時調用format函數和第一個argument,已經寫好的模板。那么將返回

“This is Major Tom to ground control. I’m stepping through the door.”???

“This is Major Tom to ground control. I’m floating in a most peculiar way.”

創建引用自身的函數

你可能覺得這樣很酷,不過,arguments還有更多的驚喜。他還有其他有用的特性:callee方法 。Arguments.callee包括了一個函數的引用去創建一個argument對象。那么該如何使用呢?

Arguments.callee方法能讓一個匿名函數很方便的指向本身。

Repeat是一個承載了一個函數引用和兩個數字的函數。第一個數字是函數調用幾次,第二個數字是每個調用的間隔時間,單位是毫秒。

function repeat(fn, times, delay) {???

? return function() {???

??? if(times– > 0) {???

????? fn.apply(null, arguments);???

????? var args = Array.prototype.slice.call(arguments);???

????? var self = arguments.callee;???

????? setTimeout(function(){self.apply(null,args)}, delay);???

??? }???

? };???

}?

Repeat函數使用了arguments.callee方法從變量self去獲取一個引用,指向運行原始指令的函數。這樣,匿名函數就可以再次調用本身。

我有一段超級簡介的函數,承載了一個字符串和執行alert方法。

function comms(s) {???

? alert(s);???

}?

然而,我想創建一個特殊的版本,通過這個版本我可以重復這個動作三次,每次間隔2秒鐘。那么,我們可以

var somethingWrong = repeat(comms, 3, 2000);???

somethingWrong(“Can you hear me, major tom?”);

調用了somethingWrong函數的結果就是復這個動作三次,每次alert間隔2秒鐘。

Arguments雖然不是經常用到,有點古怪,但是,它充滿了驚喜,非常值得我們去了解 。

原文地址:arguments : A JavaScript Oddity

轉載于:https://www.cnblogs.com/flyaway100/p/3484883.html

總結

以上是生活随笔為你收集整理的javascript arguments的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。