JavaScript sum函数中...arguments、解构赋值及instanceof用法疑问
function sum(...arguments) { if (arguments.length === 1) { const [firstArg] = arguments; if (firstArg instanceof Array) { return sum(...firstArg) } } return arguments.reduce((a, b) => a + b); }
问题1:函数参数中arguments前方的...运算符作用是什么?
这里的...是剩余参数运算符,作用是把调用函数时传入的所有离散参数,统一打包成一个数组存储到arguments变量中。
举个例子:如果你调用sum(1,2,3,4),运算符会把传入的4个单独的数字整合成数组[1,2,3,4]赋值给arguments,不需要提前写死形参的数量,就能接住任意多的传入参数。
问题2:代码里const [firstArg]的作用是什么,运行逻辑是怎样的?
这是ES6的数组解构赋值语法,作用是快速提取arguments数组的第一个元素,赋值给变量firstArg。
运行逻辑非常简单:等号右侧是数组时,解构会按索引位置一一对应给左侧的变量,这里左侧只写了一个变量firstArg,就只会取数组索引为0的第一个元素,等效于写const firstArg = arguments[0],语法更简洁直观。
问题3:请用通俗易懂的语言解释instanceof的含义
instanceof的作用是判断某个值是不是指定类别的实例,你可以把它理解成「身份核验」:
左边放你要检查的目标值,右边放对应的类别,核验通过就返回true,不通过就返回false。
举个通俗的例子:面包 instanceof 食物 就会返回真,面包 instanceof 电子产品 就会返回假。本题代码里的firstArg instanceof Array,就是在核验拿到的第一个参数是不是数组类型。
内容的提问来源于stack exchange,提问作者Usman Khan
相关产品推荐
相关产品推荐

