js中的arguments对象详解!
七娃博客564人阅读
最近学习研究面试题,发现很多函数(深拷贝,数组乱序,节流防抖....)里面都有arguments这个对象参数,最开始百度了一下,是一个对应于传递给函数的参数的类数组对象,然后就绕过了TA...
然后今天学习 “柯里化函数”的时候,又撞见了arguments,还直接当变量用了,就知道我理解出问题了,看的太多片面,换句话说,把这个arguments想的太复杂了!
if (arguments.length == 2) { return arguments[0] + arguments[1]; }
arguments定义
-
MDN: arguments对象是所有(非箭头)函数中都可用的局部变量。
-
W3C: arguments是一个类数组对象,这个数组里面保存的是传递给一个函数的参数
-
七娃:arguments就是函数调用时 传进来 的 变量 !!!
为什么这样说呢? 看下面的案例:
let xxx =555; function add(x){ let xx =555; console.log(arguments) } add(1,2,3)
最开始我理解MDN的定义,是函数内的局部变量都算arguments的内容,可是经过上面的测试发现,全局变量和函数内声明的变量都不算arguments的参数,arguments只接收add传进来的参数。那么,函数可以被接收吗?
function add(x){ console.log(arguments) } function log(){ console.log(456) } add(1,2,3,log)
答案是肯定的,只要通过参数传进去的,无论什么类型,都会变成 arguments对象的内容!
arguments特点:
1.arguments对象不是一个 Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性。
console.log(arguments.length) console.log(arguments[0])
2.arguments对象可以转换为一个真正的Array数组
var args = Array.prototype.slice.call(arguments); var args = [].slice.call(arguments);
ES2015
const args = Array.from(arguments); const args = [...arguments];
3.typeof参数返回 'object'
console.log(typeof arguments); // 'object'
END!又学习到一个小角落的知识点,如同沧海拾贝,加油打工人!
评论 | 0 条评论
登录之后才可留言,前往登录