JS之arguments属性解读函数传参?

Arguments
  该对象代表正在执行的函数 和 调用他的函数的参数。

  arguments属性:为当前执行中的 Function 对象返回 arguments 对象 和 参数。

[function.]arguments[n]

参数说明:

  参数function :选项。当前正在执行的 Function 对象的名字。

  n:表示传递过来的参数下标索引

1.对于参数对象
  说明:Arguments是进行函数调用时,除了指定的参数外,还另外创建的一个隐藏对象。

    <script>
var result =function(){
   alert(arguments.length);  //返回2  alert(argument[0]);      //返回123
};
result(123,‘nihjao‘);
    </script>可知:在没有定义形式参数变量的情况下爱,也传过来了参数,并被arguments接受。所以arguments是一个隐藏对象

在函数中定义形参接受参数

var result =function(y){
    alert(y);
  alert(result.arguments[0]);  //返回123
  alert(arguments[1]);      //返回 nihao
  alert(arguments.length);    //返回 2 arguments.length是指实参长度
  alert(arguments.callee.length);  //返回1 arguments.callee.length是形参长度

};

result(123,‘nihjao‘);
    </script>此时:函数定义了一个形参 y 接受传过来的参数,只接受第一个

2.callee属性 返回正在执行的函数对象

  返回正在执行的function对象,也就是所指定的 Function 对象的正文。

function calleeDemo() {
  alert(arguments.callee);
}
callee能够打印函数其本身
 

  callee 属性是 arguments 对象的一个成员,他表示对函数对象本身的引用,这有利于匿名函数的递归或确保函数的封装性,该属性只在函数正在执行时可用

注意:callee拥有length属性,arguments.length是实参度, arguments.callee.length是形参长度,由此能够判断调用时形参长度是否和实参长度一致。

递归计算:递归计算1到n的自然数之 和?  

var sum = function(n){
  if (n <= 0) return 1;
  else return n +arguments.callee(n - 1)
}
比较一般的递归函数:
var sum = function(n){
  if (1==n) return 1;
  else return n + sum (n-1);
}
调用时:sum(100);

其中函数内部包含了对sum自身的引用,函数名仅仅是个变量名,在函数内部调用sum即相当于调用一个全局变量,不能很好的体现出是调用自身,这时使用callee会是 个比较好的方法。

时间: 2024-10-10 03:04:33

JS之arguments属性解读函数传参?的相关文章

js值的类型和函数传参

javascript中所有函数的参数都是按值传递的! 由于js中的值分为基本类型值和引用类型值,所以才会出现函数对外部值改变情况的不同. 基本类型值指简单的数据段,而引用类型值指那些可能由多个值构成的对象. 5种基本类型(Undefined  Null  String  Number  Boolean)是按值访问的,可以操作保存在变量中的实际的值: 引用类型的值是保存在内存中的对象,javascript不允许用户直接访问内存中的位置,在操作对象时,实际上是在操作对象的引用而不是实际的对象,因此,

JS错误记录-fgm练习-函数传参

<script> window.onload = function() { var oBtn = document.getElementsByTagName('button')[0]; var aTxt = document.getElementsByTagName('input'); // oBtn.onclick = getValue(aTxt[0].value, aTxt[1].value); // 点击事件后面要跟function 再调用别的函数!! oBtn.onclick = fu

js最基础知识回顾2(函数传参,操作属性的第二种方式,提取行间事件,操作一组元素,this,焦点问题和鼠标按下抬起,选项卡)

一.函数传参     1.函数传参:参数就是占位符----函数里定不下来的东西 a. var a1=function(){ alert(123); }; function a(f){ // 相当于 f=a1 f(); }; a(a1); b.  function skip(skipPath){  //换肤 var oLink1 = document.getElementById('link1'); oLink1.href=skipPath; } c.   function setStyle(na

【JS学习笔记】函数传参

比如仅仅改变背景的颜色 函数传参:参数就是占位符. 那么在什么时候用传参呢?函数里定不下来的东西. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">

函数传参,改变Div任意属性的值&amp;&amp;图片列表:鼠标移入/移出改变图片透明度

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

2、函数传参

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>2.函数传参</title> <link href="base.css"> <style> li{ padding-bottom: 50px; } .l{ border: 1px solid #ccc; width

c# 通用类型系统 深拷贝 浅拷贝 函数传参

c# 通用类型系统 及变量在 深拷贝 浅拷贝 函数传参 中的深层次的表现 在编程中遇到了一些想不到的异常,跟踪发现,自己对于c#变量在内存上的表现理解有偏差,系统的学习并通过代码实验梳理了各种情况下,变量在内存级的表现情况,对以后的coding应该有些帮助.在此记录以免忘记了... 1. 通用类型系统 先来一张图: 通用数据类型分为了值类型和引用类型. 我们定义一个int型实际上是一个system.int32的实例,在语法上我们像使用其他的类对象一样,但是,存储的的仍然是基本类型.这种把基本类型

C语言之main函数传参

1:为什么需要给main函数传参 首先要明白一点,给mian函数传参不是必须的,但是有时候我们需要通过给main函数不同的参数来得到的不同的结果,比如我们希望main函数中某个变量的值为0时执行子函数A,该变量值为1时执行子函数B,那么这个时候就可以通过给main函数传参来实现,mian函数传参格式如下: int main(int argc , char *argv[]) int main(int argc , char **argv) 参数解释: argc:int类型的参数,表示给mian函数

js函数传参

js所有函数传参都是按值传递 1>传基本参数类型:被传递的值复制给函数形参 function addMath(num){ num += 10; return num; } var counts = 20; var results = addMath(counts); alert("count="+counts+",result="+results); couts未改变,不是按引用传递的 2>传递obj类型 function setName(obj){ o