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"

 

posted @ 2021-04-26 09:58  铁打的代码流水的bug  阅读(67)  评论(0)    收藏  举报