首頁 web前端 js教程 js-arguments的認識

js-arguments的認識

Dec 14, 2016 am 09:11 AM
javascript

自己建構一個Array like 
類別陣列的構成重點: 
1,元素是陣列式索引 
2,有length屬性 

Js程式碼 

var test3 = {  
    0 : 10,  
    1 : function(){  
        return this[0];  
    },  
    length:2  
}  
console.log(Array.prototype.slice.call(test3));//打印[10, function()]
登入後複製





Js程式碼 

var o = {  
    name:"javascript"  
};  
var f1 = function(){  
    return 2;  
}  
var foo = function(a,b,c){  
    console.log(arguments, typeof arguments, $.type(arguments), typeof arguments.push);  
    //[100, function(), Object { name="javascript"}] object object undefined  
  
    //尽管arguments不是数组,但仍可以通过for循环取出每一个元素  
    for (var i in arguments ){  
        console.log(arguments[i]);  
    }  
    /*打印 
        100 
        function() 
        Object { name="javascript"} 
    */  
  
    //现在让数组的slice运行在arguments的context中,参数为0,则将arguments转成了数组,(arguments本身没变)  
    var ret = Array.prototype.slice.call(arguments);  
  
    console.log(ret, typeof ret, $.type(ret), typeof ret.push);  
    //[100, function(), Object { name="javascript"}] object array function  
}  
foo(100,f1,o);
登入後複製

(arguments是物件) 

如果希望轉成真正的數組,則可以 

var slice = [].slice; 

slice.call(arguments); 

也可以:Aarray.prototype.slice.call(arguments);

Js程式碼 

function func(a,b){  
    alert(a);  
    alert(b);  
    for(var i=0;i<arguments.length;i++){  
        alert(arguments[i]);  
    }  
}  
func(1,2,3,4);
登入後複製

基礎介紹 

js進行函數呼叫時,除了指定的參數外,還會建立一個隱含的物件-arguments。 

一、arguments可以用arguments[index]這樣的語法取值,擁有長度屬性length。 arguments物件儲存的是實際傳遞給函數的參數,而不限於函數宣告所定義的參數列表,例如: 



Js程式碼 

var sum=function(n){  
    if(1==n) {  
        return 1;  
    } else {  
        return n + arguments.callee(n-1);  
    }  
}  
alert(sum(100));
登入後複製

程式碼運行時會依序顯示:1,2,1,2,3 ,4。函數定義了兩個參數,但是在呼叫的時候傳遞了4個參數。 

二、arguments的callee屬性 

它表示對函數物件本身的引用,這有利於實現無名函數的遞歸或保證函數的封裝性。例如:用遞歸來計算1到n的自然數總和: 



Js程式碼 

/* 
 * 演示arguments的用法,如何获取实参数和形数数 
 */  
function argTest(a,b,c,d){  
    var numargs = arguments.length;     // 获取被传递参数的数值。  
    var expargs = argTest.length;       // 获取期望参数的数值。  
    alert("实参数目为:"+numargs)  
    alert("形数数目为:"+expargs)  
  
    alert(arguments[0])           
    alert(argTest[0])          //undefined 没有这种用法  
}  
//argTest(1,2)  
//argTest(1,2,3,4,5)  
  
  
/* 
 *  arguments不是数组(Array类) 
 */  
  
Array.prototype.selfvalue = 1;  
function testAguments(){  
    alert("arguments.selfvalue="+arguments.selfvalue);  
}  
//alert("Array.sefvalue="+new Array().selfvalue); // 1  
//testAguments();  //arguments.selfvalue = undefined  
  
  
  
/* 
 * 演示函数的callee属性. 
 * 说明:arguments.callee:初始值就是正被执行的 Function 对象,用于匿名函数 
 */  
function calleeDemo() {  
    alert(arguments.callee);  
}  
//calleeDemo();  
//(function(arg0,arg1){alert("形数数目为:"+arguments.callee.length)})();  
  
  
  
  
/* 
 * 演示函数的caller属性. 
 * 说明:(当前函数).caller:返回一个对函数的引用,该函数调用了当前函数 
 */  
  
function callerDemo() {  
    if (callerDemo.caller) {  
        var a= callerDemo.caller.arguments[0];  
        alert(a);  
    } else {  
        alert("this is a top function");  
    }  
}  
function handleCaller() {  
    callerDemo();  
}  
  
//callerDemo();  
//handleCaller("参数1","参数2");  
  
  
  
  
  
/* 
 * 演示apply,call函数的用法 
 * 说明:作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数方式有所区别: 
 *       apply(thisArg,argArray); 
 *     call(thisArg[,arg1,arg2…] ]); 
 *     即所有函数内部的this指针都会被赋值为thisArg 
 */  
  
 function ObjectA(){  
    alert("执行ObjectA()");  
    alert(arguments[0]);  
    alert(this.b);//在ObjectB中用call/apply调用ObjectA时,ObjectB的变量b的值。  
    this.hit=function(msg){alert(msg)}  
    this.info="我来自ObjectA"  
 }  
   
 function ObjectB(){  
    alert("执行ObjectB()");  
    this.b = &#39;2b&#39;;  
    //调用ObjectA()方法,同时ObjectA构造函数中的所有this就会被ObjectB中的this替代  
    ObjectA.apply(this,arguments);//ObjectA.call(this);  
    alert(this.info);  
 }  
 //ObjectB(&#39;参数0&#39;);  
  
  
 var value="global 变量";  
 function Obj(){  
    this.value="对象!";  
 }  
 function Fun1(){  
    alert(this.value);  
 }  
 //Fun1();  
 //Fun1.apply(window);   
 //Fun1.apply(new Obj());
登入後複製
arguments.callee表示引用目前正在執行的函數,或者說是呼叫arguments.callee的函數物件的引用,它給匿名函數提供了一種自我引用的方式。 

更深入,包括了caller, call, apply 


Js代碼 🎜rrreee🎜🎜🎜
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

簡易JavaScript教學:取得HTTP狀態碼的方法

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript與WebSocket:打造高效率的即時天氣預報系統

如何在JavaScript中取得HTTP狀態碼的簡單方法 如何在JavaScript中取得HTTP狀態碼的簡單方法 Jan 05, 2024 pm 01:37 PM

如何在JavaScript中取得HTTP狀態碼的簡單方法

javascript如何使用insertBefore javascript如何使用insertBefore Nov 24, 2023 am 11:56 AM

javascript如何使用insertBefore

See all articles