国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript arguments 傳遞給函數的隱含參數

2024-05-06 14:14:17
字體:
來源:轉載
供稿:網友
本人第一次看到這個東東的時候,以為就是“變相”的普通參數,只不過不用在定義函數的時候明確聲明而已。
不過,代碼是廉價的(Code is cheap.)看代碼:
function funcTest(a, b) {
alert(a);
alert(b);
for ( var i = 0 ; i < arguments.length; i ++ ) {
alert(arguments[i]);
}
}
function test() {
funcTest( 1 , 2 , 3 ); // 放到html頁進行執行
}
function funcTest(a, b) {
alert(a);
alert(b);
for ( var i = 0 ; i < arguments.length; i ++ ) {
alert(arguments[i]);
}
}
function test() {
funcTest( 1 , 2 , 3 ); // 放到html頁進行執行
}
代碼運行后怎么樣,不錯,這里的length實在是很奇怪,對不對?我們來看書中是怎么說的,“代碼運行時會依次顯示:1,2,1,2,3。因此,在定義函數的時候,即使不指定參數列表,仍然可以通過arguments引用到所獲得的參數,這給編程帶來了很大的靈活性”。沒有比這句更加精辟的闡釋了。
看到這里,我們可能都有一個疑問(如果你稍微具備一點js編程知識的話),arguments參數是不是js數組對象的一個實例?下面的代碼會幫你解決這個疑點:
Array.prototype.testArg = " test arguments " ;
function funcArg() {
alert(arguments.testArg);
}
function test() {
alert( new Array().testArg);
funcArg();
}
Array.prototype.testArg = " test arguments " ;
function funcArg() {
alert(arguments.testArg);
}
function test() {
alert( new Array().testArg);
funcArg();
}
代碼運行結果是先彈出"test arguments"和"undefined",為什么funcArg調用返回“undefined”?看到這里相信你對上面的疑問已經消除。
到這里你以為你掌握了arguments的全部?那就太小瞧js的天才設計者(們)了,下面看另外一個有才的設計:
Q:使用遞歸來計算1 到n 的自然數之和
A1:
function sum(n) {
if ( 1 == n) return 1 ;
else return n + sum(n - 1 );
}
function test() {
alert(sum( 100 )); ; // 放到html頁進行執行
} function sum(n) {
if ( 1 == n) return 1 ;
else return n + sum(n - 1 );
}
function test() {
alert(sum( 100 )); ; // 放到html頁進行執行
}
A2:
function sum(n) {
if ( 1 == n) return 1 ;
else return n + arguments.callee(n - 1 );
}
function test() {
alert(sum( 100 )); ; // 放到html頁進行執行
} function sum(n) {
if ( 1 == n) return 1 ;
else return n + arguments.callee(n - 1 );
}
function test() {
alert(sum( 100 )); ; // 放到html頁進行執行
}
A1和A2這兩個回答都解決了問題,相信第一種方法是大多數人的常規做法,但是js推薦使用第二種,原書說A1這種方式“其中函數內部包含了對 sum 自身的調用,然而對于JavaScript 來說,函數名僅僅是一個變量名,在函數內部調用sum 即相當于調用一個全局變量,不能很好的體現出是調用自身”,sum都調用sum了,還說“不能很好的體現出是調用自身”,為什么呢?
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 江达县| 宾阳县| 锡林浩特市| 宜城市| 客服| 石泉县| 阜平县| 瓮安县| 寿光市| 塔城市| 景德镇市| 拜城县| 长乐市| 清水县| 景谷| 塘沽区| 清徐县| 松溪县| 阿拉善盟| 遵化市| 黄梅县| 含山县| 吴桥县| 冕宁县| 海盐县| 喜德县| 保德县| 西林县| 额尔古纳市| 旺苍县| 南华县| 西和县| 赣州市| 日喀则市| 香河县| 垫江县| 洞口县| 密山市| 白玉县| 香港 | 榆中县|