美文网首页
js中传参之Arguments对象

js中传参之Arguments对象

作者: 做我想做与写我想写 | 来源:发表于2019-03-13 09:51 被阅读0次

在使用js时使用函数是司空见惯的,但是关于函数的形参以及命名参数的基本概念一直仅限于会用而没有去揪其本源,所以有空就研究一下。

首先js给的解析是,真正进入函数的局部参数是存放在argument这个伪数组对象中的,也就是说,不管是否传递了命名参数,都能通过argument对象(伪数组)来进行访问,如下图:

因为在调用的时候传递了俩个形参,而函数却没有设置命名参数,但是依旧可以通过argument对象访问到,如下图

这也就验证了真正传入函数的局部参数是通过给argument添加的指针指向形参的值(因为argument是对象,所以用的是"引用复制",而传进来的形参却是"基本类型",所谓基本类型就是指没有引用指针的,而是直接存在于栈内存中的值),那么改变argument指针指向的值会改变原来的形参么,答案是不会,

因为作用域的问题,argument复制的对象指针也是局部的,如下图:

那么运行之后的值为:

同时也验证了传进去的命名参数也是局部变量的复制体,因为这与argument对象的某个属性指针指向的是同一个作用域的值,所以可以被改变,

还有一种情形就是,如果给了多个命名参数,但是却只传进去了一个形参,那么多出来的就会被认为是undefined,这种情况在严格模式下是错误的。

在传入来个相同的命名参数之后,js会才用后传的值,因为js设计的模式是不传参数的类型(整型......),所以不可能会重载,那么js就会将后传的值覆盖掉之前传的值(因为是局部的一个复制,很好理解,没记错的话这种情况在严格模式也会报错),贴个图吧:

node一下的结果:

(es6的一个类数组参数 ...arguments可能就是基于这样的一个封装。)

over!

相关文章

  • js中传参之Arguments对象

    在使用js时使用函数是司空见惯的,但是关于函数的形参以及命名参数的基本概念一直仅限于会用而没有去揪其本源,所以有空...

  • arguments用法

    参考arguments指的是函数内置的实参集合JS的一个内置对象,JS传的是形参,可传可不传,若方法里没有写参数却...

  • Javascript中对arguments的一点点理解

    Javascript中的arguments对象 实参和形参的同步性 实参是存储在arguments对象中,argu...

  • 知识点

    ①页面重定向 ②类数组对象 arguments 当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参...

  • 2016.11.29 JS

    arguments arguments是对象的一个特殊属性。 arguments拥有数组长度属性length; 参...

  • 完全理解JS--arguments

    什么是arguments? 它是JS的一个内置对象,常被人们所忽略,但实际上确很重要,JS不像JAVA是显示传递参...

  • WkWebView和JS交互

    JS调用OC方法 oc中初始化WKWebView对象,进行相应的配置 JS中定义给oc传参的方法,注意sendMe...

  • js中的arguments对象

    《JavaScript高级程序设计》读书笔记 js中函数的参数与别的语言的参数有些不同。js中的函数不介意传递进来...

  • js中的arguments 对象

    什么是arguments对象 1. 所有function内部,自动创建的一个对象 2. 专门顺序接收所...

  • JS中的arguments对象

    在JavaScript中,arguments是什么? 在JavaScript中,arguments是对象的一个特殊...

网友评论

      本文标题:js中传参之Arguments对象

      本文链接:https://www.haomeiwen.com/subject/sygapqtx.html