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 条评论
登录 后参与评论

相关文章

来自专栏Python研发

JavaScript

JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应的代码,浏览器可以解释...

1192
来自专栏柠檬先生

JavaScript 基础(一)

基本语法: 区分大小写:       ECMAScript 中的一切(变量,函数名和操作符)都区分大小写。 标识符:     表示符就是指,变量,函数,属性...

20410
来自专栏章鱼的慢慢技术路

Go语言_range(范围)理解

这是因为 for _ 表示遍历数组的下标,从nums[0],nums[1],nums[2]依次开始遍历,所以最后的值为sum=2+3+4=9;但是如果把 for...

652
来自专栏禹都一只猫博客

Pandas文本数据处理 | 轻松玩转Pandas(4)

1482
来自专栏代码世界

Python 中格式化字符串 % 和 format 两种方法之间的区别

  Python2.6引入了 format 格式化字符串的方法,现在格式化字符串有两种方法,就是 % 和 format ,具体这两种方法有什么区别呢?请看以下解...

4508
来自专栏ShaoYL

预处理指令--宏定义

2947
来自专栏从流域到海域

Python set(集合) 这一定是最全的介绍集合的博文

Python的set是一个无序且无重复元素的集合,概念上相当于数学上的无序集,数据结构上相当于dict的键。 既然set是集合,则必然可以实现并、交、...

2085
来自专栏五分钟学算法

每天一算:Contains Duplicate II

953
来自专栏Modeng的专栏

JavaScript中的正则表达式

版权声明:本文为原创文章发布于公众号:Modeng , 你可以随意转载但请务必注明出处!!!https://blog.csdn.net/qq_32135281/...

662
来自专栏糊一笑

正则表达式学习笔记

正则表达式 1. 使用正则 创建正则表达式有两种方式,一种是以字面量方式创建,另一种是使用RegExp构造函数来创建。 var expression = / p...

2724

扫码关注云+社区