淺談javascript中的Function和Arguments
javascript的Function
屬性:
1、Arguments對象
2、caller
對調(diào)用單前函數(shù)的Function的引用,如果是頂層代碼調(diào)用,
則返回null(firefox返回undefined)。
注:只有在代碼執(zhí)行時才有意義
3、length
聲明函數(shù)是指定的命名參數(shù)的個數(shù)(函數(shù)定義是,定義參數(shù)的個數(shù))
4、prototype
一個對象,用于構(gòu)造函數(shù),這個對象定義的屬性和方法
由構(gòu)造函數(shù)創(chuàng)建的所有對象共享。
方法:
applay() --> applay(this,[])
call() --> call(this,可變參數(shù))
toString()
javascript的Arguments對象
Arguments對象只在函數(shù)體內(nèi)定義,他是一個類數(shù)組(是對象不是數(shù)組,只是有數(shù)組的一些特性)。
說明:
當(dāng)一個函數(shù)被調(diào)用的時候,會為該函數(shù)創(chuàng)建一個Arguments對象,
局部變量arguments會自動初始化并引用那個Arguments對象(arguments是Arguments對象的引用)
該對象的屬性:
1、callee
對當(dāng)前正在執(zhí)行的函數(shù)的引用
2、length
傳遞給函數(shù)參數(shù)的個數(shù)(實際傳遞給函數(shù)參數(shù)的個數(shù))
arguments特性
arguments對象不能顯式創(chuàng)建,arguments對象只有函數(shù)開始時才可用。函數(shù)的 arguments 對象并不是一個數(shù)組,訪問單個參數(shù)的方式與訪問數(shù)組元素的方式相同。索引 n 實際上是 arguments 對象的 0…n 屬性的其中一個參數(shù)。
在javascript中,不需要明確指出參數(shù)名,就能訪問它們。如:
function hi(){ if(arguments[0]=="andy"){ return; } alert(arguments[0]);
arguments的length屬性
含義
返回調(diào)用程序傳遞給函數(shù)的實際參數(shù)數(shù)目。
用法
[function.]arguments.length
其中可選項 function 參數(shù)是當(dāng)前正在執(zhí)行的 Function 對象的名稱。
說明
當(dāng) Function 對象開始執(zhí)行時,腳本引擎將 arguments 對象的 length 屬性初始化為傳遞給該函數(shù)的實際參數(shù)數(shù)目。
js不會主動為你判斷你到底給函數(shù)傳了多少個參數(shù),如果你多傳了,多余的部分就沒有被使用,如果你少傳了,那么沒傳的參數(shù)值就是undefined
所以我們可以借助arguments的length屬性來檢測調(diào)用函數(shù)時是否使用了正確數(shù)目的實際參數(shù),因為javascript是不會為你做這些事的
arguments 的 0...n 屬性
含義
返回一個 arguments 對象中的各個參數(shù)的實際值,相應(yīng)的值是由一個正在執(zhí)行的函數(shù)的 arguments屬性返回的。
用法
[function.]arguments[[0|1|2|...|n]]
參數(shù)
function
可選項。當(dāng)前正在執(zhí)行的 Function 對象的名稱。
0, 1, 2, …, n
必選項。0 到 n 范圍內(nèi)的非負(fù)整數(shù),其中 0 代表第一個參數(shù)而 n 代表最后一個參數(shù)。最后參數(shù) n 的值為 arguments.length-1
說明
0 . . . n 屬性所返回的值就是傳遞給正在執(zhí)行的函數(shù)的實際值。盡管實際上并不是一個參數(shù)數(shù)組,您還是可以按照與訪問數(shù)組元素的方法相同的方式訪問組成 arguments 對象的各個參數(shù)。
示例
下面的例子演示了 arguments 對象的 0 . . . n 屬性的用法
function ArgTest(){ var s = ""; s += "The individual arguments are: " for (n=0; n< arguments.length; n++){ s += ArgTest.arguments[n]; s += " "; } return(s); } print(ArgTest(1, 2, "hello", new Date()));
arguments的callee屬性
含義
表示對函數(shù)對象本身的引用,也就是所指定的 Function 對象的正文,這有利于實現(xiàn)無名函數(shù)的遞歸或者保證函數(shù)的封裝性。
用法
[function.]arguments.callee
可選項 function 參數(shù)是當(dāng)前正在執(zhí)行的 Function 對象的名稱。
說明
callee 屬性是 arguments 對象的一個成員,僅當(dāng)相關(guān)函數(shù)正在執(zhí)行時才可用。
callee 屬性的初始值就是正被執(zhí)行的 Function 對象。這允許匿名的遞歸函數(shù)。
實例:
用遞歸來計算1到n的自然數(shù)之和:
<script> var sum=function(n){ if(1==n) { return 1; } else { return n + arguments.callee(n-1); } } alert(sum(100)); </script>
對函數(shù)Function原型prototype的一下說明:
當(dāng)通過構(gòu)造函數(shù)初始化一個對象的時候,
new關(guān)鍵字通過調(diào)用構(gòu)造函數(shù)初始化這個對象,并把新的對象 作為this關(guān)鍵字的值 來傳遞,
與此同時,new關(guān)鍵字還設(shè)置了這個對象的原型,一個對象的原型就是它的構(gòu)造函數(shù)的prototype屬性的值
(例如:a = new Date(),a對象的原型就是Date.prototype)
所有的函數(shù)都有一個prototype屬性,當(dāng)這個函數(shù)【被定義】的時候,prototype屬性會自動創(chuàng)建和初始化。
prototype屬性的初始化值是一個對象,并且這個對象只有一個屬性,這個屬性是constructor,
它指回到和原型相關(guān)聯(lián)的那個構(gòu)造函數(shù)。
以上這篇淺談javascript中的Function和Arguments就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
實例詳解JavaScript中setTimeout函數(shù)的執(zhí)行順序
關(guān)于javascript的運(yùn)行機(jī)制大家都應(yīng)該有所了解了吧,其實javascript是一個單線程的機(jī)制,但是因為隊列的關(guān)系它的表現(xiàn)會讓我們感覺是一個多線程的錯覺。下面這篇文章通過實例主要給大家介紹了關(guān)于JavaScript中setTimeout函數(shù)執(zhí)行順序的相關(guān)資料,需要的朋友可以參考下。2017-07-07關(guān)于JavaScript數(shù)組對象去重的幾種方法
這篇文章主要介紹了關(guān)于JavaScript數(shù)組對象去重的幾種方法,不管是map對象的特性還是reduce方法都是很好用的去重方法,需要的朋友可以參考下2023-04-04用Javascript判斷圖片是否存在,不存在則顯示默認(rèn)圖片的代碼
用Javascript判斷圖片是否存在,不存在則顯示默認(rèn)圖片的代碼,需要的朋友可以參考下。2007-03-03JavaScript將一個數(shù)組插入到另一個數(shù)組的方法
這篇文章主要介紹了JavaScript將一個數(shù)組插入到另一個數(shù)組的方法,涉及javascript中Array.prototype.push.apply方法的使用技巧,非常具有實用價值,需要的朋友可以參考下2015-03-03