JavaScript中函数参数里的"..."(三个点)是什么?
JavaScript中函数参数
...语法的详解 你看到的...stores里的...是JavaScript的**剩余参数(Rest Parameters)**语法,专门用来处理函数接收可变数量参数的场景,我给你一步步解释清楚:
核心功能
剩余参数的作用是:把函数调用时传入的所有未被单独声明的参数,打包成一个标准的JavaScript数组。
比如在你的代码里:
function StoreMixin(...stores) { // 这里的stores就是一个数组,包含调用该函数时传入的所有参数 } // 举个调用例子: StoreMixin(UserStore, CartStore, OrderStore); // 此时stores变量的值就是 [UserStore, CartStore, OrderStore]
在你的Mixin代码里的实际价值
看你贴的代码片段,Mixin在componentDidMount和componentWillUnmount中用到了stores.forEach()——正因为...把所有传入的store打包成了数组,才能直接用数组的遍历方法,给每个store统一添加/移除状态变更监听。如果没有这个语法,你根本没法方便地处理多个store的传入需求。
和arguments对象的区别
你可能会联想到arguments对象,但剩余参数比它更实用:
arguments是一个类数组对象,必须先转成真正的数组才能使用forEach、map这类数组方法;而剩余参数本身就是标准数组,直接就能用所有数组API- 剩余参数可以和普通参数搭配使用,比如
function initConfig(defaults, ...customConfigs),这样defaults接收第一个参数,customConfigs接收剩下的所有参数组成的数组
额外补充:展开语法(Spread Syntax)
另外,...还有一个相反的用法叫展开语法,它是把数组/可迭代对象拆成单个参数传递给函数。比如:
const numbers = [10, 20, 30]; Math.max(...numbers); // 等价于 Math.max(10, 20, 30)
这和剩余参数是互补的语法,经常一起出现在现代JavaScript代码里。
这个语法在处理不确定数量的参数时非常方便,像你的StoreMixin这种需要接收任意数量store的场景,简直是量身定做的解决方案。
内容的提问来源于stack exchange,提问作者Nicolas S.Xu
相关产品推荐
相关产品推荐

