JS基礎(chǔ)(七) arguments對(duì)象

<script>

? ? ? ? /*

? ? ? ? ? ? arguments對(duì)象里面保存這方法的所有參數(shù)

? ? ? ? ? ? arguments對(duì)象里面有個(gè)一個(gè)callee方法,該方法指向當(dāng)前方法本身

? ? ? ? */

? ? ? ? // 定義穩(wěn)定的遞歸函數(shù)

? ? ? ? /* function clac(num){

? ? ? ? ? ? if(num === 1){

? ? ? ? ? ? ? ? return num

? ? ? ? ? ? }

? ? ? ? ? ? // 因?yàn)閍rguments.callee就是 指向當(dāng)前方法本身。

? ? ? ? ? ? // 這樣的做的好處是,防止外部方法名修改后,導(dǎo)致遞歸調(diào)用失效。

? ? ? ? ? ? let sum = num + arguments.callee(num - 1)

? ? ? ? ? ? return sum

? ? ? ? } */

? ? ? ? // 方法在定義時(shí),設(shè)置3個(gè)形參

? ? ? ? function fun1(a, b, c){

? ? ? ? ? ? console.log(a, b, c);

? ? ? ? ? ? // arguements對(duì)象里保存著方法所有的參數(shù)

? ? ? ? ? ? console.log(arguments);

? ? ? ? ? ? console.log(arguments[3]);

? ? ? ? ? ? console.log(arguments[4]);

? ? ? ? ? ? console.log('-'.repeat(50));

? ? ? ? ? ? for(let i = 0; i < arguments.length; i++){

? ? ? ? ? ? ? ? console.log(arguments[i]);

? ? ? ? ? ? }

? ? ? ? ? ? /* arguments.forEach(element => {

? ? ? ? ? ? ? ? console.log(element);

? ? ? ? ? ? ? ? // Uncaught TypeError: arguments.forEach is not a function

? ? ? ? ? ? ? ? // arguments是一個(gè)Object對(duì)象,不是一個(gè)數(shù)組對(duì)象,定義的方法體中沒有forEach()方法

? ? ? ? ? ? ? ? // 換句話說就是只有數(shù)組才可以使用froEach()方法

? ? ? ? ? ? }); */

? ? ? ? ? ? console.log('-'.repeat(50));

? ? ? ? ? ? // 注意:arguments對(duì)象里面有一個(gè)callee方法,該方法指向當(dāng)前方法本身

? ? ? ? ? ? console.log(arguments.callee); ?// 輸出方法本身的代碼塊

? ? ? ? }

? ? ? ? // 方法在調(diào)用時(shí),傳遞了5個(gè)實(shí)參

? ? ? ? // 在方法里面,另外兩個(gè)參數(shù)值就可以用arguements對(duì)象來獲取

? ? ? ? fun1(100, 200, 300, 400, 500) ?

? ? ? ? // 100 200 300

? ? ? ? // Arguments(5)?[100, 200, 300, 400, 500, callee: ?, Symbol(Symbol.iterator): ?]

? ? ? ? // 400

? ? ? ? // 500

? ? ? ? console.log('-'.repeat(50));

? ? ? ? // 計(jì)算20以內(nèi)所有數(shù)的累加

? ? ? ? // 定義一個(gè)計(jì)算器方法

? ? ? ? // function fun2(num){

? ? ? ? function calc(num){

? ? ? ? ? ? if(num === 1) return num

? ? ? ? ? ? // 因?yàn)閍rguments.callee就是 指向當(dāng)前方法本身。

? ? ? ? ? ? // 這樣的做的好處是,防止外部方法名修改后,導(dǎo)致遞歸調(diào)用失效。

? ? ? ? ? ? return num + arguments.callee(num - 1)

? ? ? ? }

? ? ? ? // console.log(fun2(20));

? ? ? ? console.log(calc(20)); ?// 210

? ? ? ? // 總之,如果在遞歸中使用到了遞歸的調(diào)用,最好將其更換為arguments.callee。

? ? ? ? // 這樣的做的好處是,防止外部方法名修改后,導(dǎo)致方法體中的遞歸調(diào)用失效。

? ? </script>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容