2021.04.25(函数的扩展)
函数参数的默认值
为了避免这个问题,通常需要先判断一下参数 y 是否被赋值,如果没有,再等于默认值。
1. if (typeof y === 'undefined') { 2. y = 'World'; 3. }
ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。
1. function log(x, y = 'World') { 2. console.log(x, y); 3. } 4. 5. log('Hello') // Hello World 6. log('Hello', 'China') // Hello China 7. log('Hello', '') // Hello
可以看到,ES6 的写法比 ES5 简洁许多,而且非常自然。下面是另一个例子。
1. function Point(x = 0, y = 0) { 2. this.x = x; 3. this.y = y; 4. } 5. 6. const p = new Point(); 7. p // { x: 0, y: 0 }
严格模式
从 ES5 开始,函数内部可以设定为严格模式。
1. function doSomething(a, b) { 2. 'use strict'; 3. // code 4. }
ES2016 做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部
就不能显式设定为严格模式,否则会报错。
name 属性
ES6 对这个属性的行为做出了一些修改。如果将一个匿名函数赋值给一个变量,ES5
的 name 属性,会返回空字符串,而 ES6 的 name 属性会返回实际的函数名。
1. var f = function () {}; 2. 3. // ES5 4. f.name // "" 5. 6. // ES6 7. f.name // "f"

浙公网安备 33010602011771号