arguments对象
来源:互联网 发布:切割大小头怎样编程 编辑:程序博客网 时间:2024/06/05 09:25
arguments对象是由函数的实参组成的一个类数组对象,具有length属性,可以像访问数组那样去访问这个对象,但又不具有数组那些方法(例如:pop())。
看书一直疑惑到底为什么arguments对象的会与参数有着很大的关联,参数发生变化,arguments对象的对应属性也会跟着去变化???
function foo (x) { console.log(arguments[0]); // 10 x = 20; console.log(arguments[0]); // 20} foo(10);
我们可以发现,在参数x
变化的同时arguments[0]
也发生了改变,难道说是我们的参数x
与arguments[0]
指向同一块内存吗?但是事实并不是我们想得那样的,看下面严格模式下得代码:
"use strict";function foo (x) { console.log(arguments[0]); // 10 x = 20; console.log(arguments[0]); // 10} foo(10);
严格模式下得arguments
不能和形参保持一致,这也就说明了arguments
与形参并不是指向内存中的同一块地址,仔细想一想,arguments
是类数组对象啊,对象有getter
与setter
属性啊,所以arguments
与形参的值能够保持一致是不是由于,非严格模式下,在构造类数组对象arguments
为其绑定了getter
与setter
,用代码试验下:
function foo (x) { // obj是我们仿造arguments对象创建的 var obj = {}; Object.defineProperty(obj,"0",{ get: function () { return x; }, set: function (value) { x = value; }, enumerable: true, configurable: true }); console.log(arguments[0]); // 10 console.log(obj['0']); // 10 x = 20; console.log(arguments[0]); // 10 console.log(obj['0']); // 20} foo(10);
结果告诉,这种说法是正确的,并且在英文版的ES规范中也有定义,在严格模式下,arguments
并没有被绑定getter与setter属性,所以不会与形参保持一致。另外不止这样的是严格模式下不能将arguments
作为函数名,变量名,当然非严格模式下我们也最好不要这样做,还有一点的就是严格模式下得arguments.callee
与arguments.callee.caller
是禁用的。
0 0
- arguments对象
- Arguments对象
- Arguments对象
- arguments对象
- arguments对象
- arguments 对象
- arguments对象
- arguments 对象
- arguments对象
- arguments对象
- arguments对象
- Javascript中的arguments 对象
- JavaScript中的arguments对象
- Javascript 的 arguments对象
- ECMAScript arguments 对象
- JavaScript中arguments对象
- JavaScript中arguments对象
- javascript arguments对象
- 工厂模式(简单工厂、工厂方法、抽象工厂)
- Mac下的Homebrew安装与使用
- 《HBase权威指南》读书笔记7:第七章 与MapReduce 集成
- Android开机自启动应用
- vijos1909【noip2014】寻找道路
- arguments对象
- 机器学习实战朴素贝叶斯的java实现
- oc基础之封装(二)
- org.apache.hadoop.security.AccessControlException: Permission denied:
- [深入理解Java虚拟机]第六章 字节码指令简介
- bzoj1614【Usaco2007 Jan】Telephone Lines 架设电话线
- C#读写EXCEL操作的简单封装
- form中input标签的各种参数设置
- 使用RecyclerView CardView相关问题 解决The hierarchy of the type is inconsistent问题