ES6函数特性:参数默认值与属性详解

需积分: 0 0 下载量 44 浏览量 更新于2024-08-04 收藏 52KB DOCX 举报
在前端大厂的最新面试中,面试官会考察应聘者对JavaScript函数特性的深入理解,特别是关于函数参数和属性的知识。以下是几个关键点: 1. **函数参数的默认值**: ES6引入了对函数参数的默认值支持,这使得函数在调用时即使未提供某些参数也能有默认的行为。例如,`function log(x, y = 'World')`中,`y`有一个默认值为'World',这样调用`log('Hello')`会输出'HelloWorld'。 需要注意的是,尽管默认参数方便,但形参一旦使用默认值声明,就禁止使用`let`或`const`进行重新声明,因为它们都是块级作用域,不能覆盖函数内部的默认声明。 2. **参数默认值与解构赋值的结合**: 当函数接收对象作为参数时,可以同时使用解构赋值和默认值。如`foo({ x, y = 5 })`,如果传递空对象或未提供`x`,则`y`会被赋值为5。如果尝试不提供参数调用,如`foo()`,由于对象参数缺失,会抛出错误。 3. **`length`属性的计算规则**: `length`属性表示函数的参数个数,未指定默认值的参数会包含在内。例如,`(function(a){}).length`为1,而`(function(a=5){}).length`为0,因为默认参数被忽略。然而,rest参数(...args)不会影响`length`的计算。 4. **非尾部默认参数和`length`属性**: 如果默认参数不是函数的尾部参数,它不会影响后续参数的计数。如`(function(a=0, b, c){}).length`为0,因为`a`的默认值隐藏了`b`的存在。 5. **`name`属性**: 函数的`name`属性返回函数的名称。虽然这个特性在严格模式下可能不可用,但在日常开发中,了解如何获取和设置函数名称是实用的。 面试时,除了掌握这些细节,应聘者还需要展示对函数作用域、闭包、可选链操作符等其他相关知识的理解,以及实际项目中如何灵活运用这些特性来优化代码和处理边界情况。