js中的 arguments ,实参的集合

本文介绍了一种在JavaScript中处理不定数量参数的方法,通过使用特殊的变量arguments来收集所有传入的参数,使得函数能够灵活地应对不同数量的输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   当 传递的参数个数不确定时,,可使用 arguments 。。

转载于:https://www.cnblogs.com/guixiaoming/p/5686210.html

### JavaScript 中箭头函数与普通函数的区别 #### 一、声明方式的不同 普通函数既可以作为声明式存在,也可以通过赋值的方式定义。而箭头函数仅能以赋值的形式进行定义[^1]。 ```javascript // 普通函数的声明方式 function normalFunction(a, b) { return a + b; } // 箭头函数的声明方式 const arrowFunction = (a, b) => a + b; ``` --- #### 二、`this` 的绑定机制差异 普通函数拥有自己的 `this` 绑定,在运行时动态决定其指向。然而,箭头函数并不具备独立的 `this`,而是从外部作用域继承 `this`,即在定义时就绑定了上下文][^[^25]。 ```javascript var obj = { id: '对象', normalFunc: function () { console.log(this.id); }, arrowFunc: () => { console.log(this.id); } }; obj.normalFunc(); // 输出:'对象' obj.arrowFunc(); // 输出:undefined 或 window/globalThis(取决于环境) setTimeout(function () { console.log(this.id); // 如果在浏览器环境中,则输出:'全局' }, 0); setTimeout(() => { console.log(this.id); // 如果在浏览器环境中,则输出:undefined 或 globalThis }, 0); ``` --- #### 三、是否支持 `new` 调用 普通函数能够被实例化并通过 `new` 关键字调用来创建新的对象,因为它具有 `prototype` 属性。相反,由于箭头函数缺乏自身的 `prototype` 和构造器特性,因此无法用于 `new` 操作[^4]。 ```javascript function NormalConstructor(name) { this.name = name; } NormalConstructor.prototype.sayName = function () { console.log(this.name); }; let instance = new NormalConstructor('张三'); instance.sayName(); // 正常工作并打印名字 try { const ArrowInstance = new (() => {})(); } catch (e) { console.error(e.message); // 报错提示不是构造函数 } ``` --- #### 四、参数处理上的异同 对于多个参数的情况,普通函数可以直接访问内置的 `arguments` 对象来获取所有传递给它的实参列表。但是箭头函数不支持这种隐式的 `arguments` 访问,需借助扩展运算符 (`...`) 来显式收集剩余参数。 ```javascript function sumArgs() { let total = 0; for (let i = 0; i < arguments.length; ++i) { total += arguments[i]; } return total; } console.log(sumArgs(1, 2, 3)); // 结果为6 const sumRestParams = (...args) => args.reduce((acc, val) => acc + val, 0); console.log(sumRestParams(1, 2, 3)); // 同样得到结果6 ``` --- #### 五、语法简洁度对比 箭头函数相比传统写法更加紧凑直观,尤其适合单行表达式或者回调场景下的简化需求[^3]。 ```javascript // 使用普通匿名函数实现数组映射 let doubledValues = [1, 2, 3].map(function(value){ return value * 2; }); // 利用箭头函数改写的版本显得更为精炼 doubledValues = [1, 2, 3].map(val => val * 2); ``` --- #### 六、其他注意要点 - **无原型链**:箭头函数不存在 `prototype` 成员变量,故不适合充当类模板角色。 - **不可更改的 `this`**:即使尝试强制调整箭头函数内的 `this` 值也不会生效,始终遵循最初设定的作用域链条关系[^2]。 - **不兼容某些高级功能**:像 `super` 这样的关键字也无法单独应用于箭头方法之中。 --- ### 总结表格 | 特性 | 普通函数 | 箭头函数 | |-------------------|----------------------------------|----------------------------| | `this` 绑定 | 动态绑定 | 静态绑定 | | 是否可 `new` | 支持 | 不支持 | | 参数集合 | 可用 `arguments` | 必须使用 `...rest` 参数 | | 函数体复杂程度 | 更灵活 | 较简单 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值