arguments,想说爱你不容易

HTML5学堂-码匠:arguments是关于函数参数的一个知识点,也是很多企业面试时的“必考点”,arguments和形参有何不同?如何去检测实参或形参的长度?一起来看看吧!

什么是arguments

arguments是一个类数组

类数组

类数组:拥有length属性,其它属性(索引)为非负整数,但并不具有数组的方法。

典型的类数组

典型的类数组:DOM节点列表(通过DOM操作获取的标签列表)、arguments。

形参与实参

什么是形参

形参:表示的是“形式参数”,是在定义函数名和函数体时使用的参数,用于接收调用该函数时传递的参数。

形参的作用

实现主调函数与被调函数之间的联系。

函数的形参意义何在

将“函数所处理的数据”,“影响函数功能的因素”或“函数处理的结果”作为形参。主要目的在于——提升函数的复用性

什么是实参

表示的是“实际参数”,是在函数调用时,传入函数的内容。实参可以是常量、变量、表达式、函数等, 但是,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值。

arguments与参数的关系

arguments与实参

arguments对象的长度是由实参个数决定的(不是形参个数)。换言之,arguments接收到的是实参的值,而形参是函数内部“重新开辟”内存空间存储的变量(也就是局部变量)。

function h5course(name) {

    console.log(name);
    console.log(arguments[0]);
}
h5course('HTML5学堂');

运行结果:

'HTML5学堂'

'HTML5学堂'

内存空间问题

形参的空间与arguments对象内存空间并不重叠。

如果形参和arguments都存在,则这两者值是同步的;

如果形参和arguments当中,有其中之一无值,则此值不会得以同步。

function h5course(name) {
    console.log(name);
    arguments[0] = '码匠';
    console.log(name);
}
h5course('HTML5学堂');

运行结果:

'HTML5学堂' '码匠'

function h5course(name, age) {
    console.log(age);
    console.log(arguments[1]);
    arguments[1] = 2;
    console.log(age);
    console.log(arguments[1]);
}
h5course('HTML5学堂');

运行结果:

'undefined'
'undefined'
'undefined'

2

arguments.callee

arguments.callee的作用

arguments.callee 属性表示当前正在执行的函数。

function h5course(name, age) {
    console.log(arguments.callee);
}
h5course('HTML5学堂');

运行结果:

function h5course(name, age) {
    console.log(arguments.callee);
}

获取形参与实参的长度(数量)

使用arguments.callee.length检测形参的数量(长度);

使用arguments.length检测实参的数量(长度)。

function h5course(name, age) {
    console.log(arguments.length);
    console.log(arguments.callee.length);
}
h5course('HTML5学堂');

运行结果:

1

2

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2017-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

关于Golang语言数组索引的有趣现象

在Twitter上看到Dave Cheney提了个pop quiz 勾起了我的好奇心,可以猜下下面这段代码的运行结果。 package main impor...

3307
来自专栏生信宝典

Python学习教程(二)

输入输出 交互式输入输出 在很多时候,你会想要让你的程序与用户(可能是你自己)交互。你会从用户那里得到输入,然后打印一些结果。我们可以分别使用raw_input...

2138
来自专栏mathor

搜索(5)

1023
来自专栏海天一树

程序员必须掌握的8大排序算法

分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序)...

2798
来自专栏恰同学骚年

数据结构基础温故-4.树与二叉树(上)

前面所讨论的线性表元素之间都是一对一的关系,今天我们所看到的结构各元素之间却是一对多的关系。树在计算机中有着广泛的应用,甚至在计算机的日常使用中,也可以看到树形...

763
来自专栏小詹同学

【记录帖】(No.003)从零打卡刷Leetcode

小詹一直觉得自己编程能力不强,想在网上刷题,又怕不能坚持。不知道有木有和小伙伴和小詹一样想找个人一起刷题呢?欢迎和小詹一起定期刷leetcode,每周一周五更新...

1312
来自专栏企鹅号快讯

什么是B+Tree

推荐阅读 微服务: springboot系列教程学习 源码:Javaweb练手项目源码下载 调优:十五篇好文回顾 面试笔试:面试笔试整理系列 B+Tree的定义...

1786
来自专栏枕边书

WEB开发中的字符集和编码

引言 我相信很多人在初接触编程时,都被字符集狠狠地虐过,特别是数据库的中文乱码问题,那么乱码是怎么产生的呢? 我们都知道计算机是以二进制存储和运行的,那么它是怎...

1985
来自专栏Golang语言社区

关于Golang语言数组索引的有趣现象

在Twitter上看到Dave Cheney提了个pop quiz 勾起了我的好奇心,可以猜下下面这段代码的运行结果。 package main impor...

33710
来自专栏SeanCheney的专栏

Python基础回顾基本数据类型和运算容器分支和循环函数、生成器和类map, reduce和filter列表生成(list comprehension)字符串文件操作和pickle异常多进程(mult

Python shell输入import this 可以看到The Zen of Python 基本数据类型和运算 基本数据类型 Python中最基本的数据类...

3757

扫描关注云+社区