【Javascript学习笔记】【ES6:函数的扩展】

目录

  • 目录
  • 函数参数的默认值
  • 与解构赋值默认值结合使用
    • 默认值的位置
  • 函数的length属性
  • 作用域
  • 快捷链接

函数参数的默认值

直接写在参数定义的后面,若无该参数才会使用默认值。

function log(x, y = 'World') {
  console.log(x, y);
}

log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello
function Point(x = 0, y = 0) {
  this.x = x;//设置了全局对象的变量x
  this.y = y;
}

const p = new Point();
p // { x: 0, y: 0 }

注意!不可再用let,const声明参数,否则报错!

与解构赋值默认值结合使用

function foo({x, y = 5}) { console.log(x, y); } foo({}) // undefined 5 foo({x: 1}) // 1 5 foo() // TypeError: Cannot read property 'x' of undefined

使用了对象的解构赋值默认值,没有使用函数参数的默认值。则注意!只有当函数foo的参数是一个对象时,变量x和y才会通过解构赋值生成,因此foo()没有参数,导致报错。解决方法如下(若无参则为空对象)。

function foo({x, y = 5} = {}) {
  console.log(x, y);
}

foo() // undefined 5

且注意:传入undefined(即没有该参数),将触发该参数等于默认值,null则为(有一个空参数)所以不等于默认值。

默认值的位置

建议!都设置为尾参数。原因:1。容易看出来;2。保证该参数可省略,否则之后的参数都默认为默认参数,可省略

函数的length属性

js函数的length属性,将返回参数个数。然而指定默认值后,length属性将只返回没有指定默认值的参数个数。
!!若默认值不是尾参数,那么length属性也不再计入后面的参数了。

作用域

函数进行声明初始化时,参数会形成一个单独的作用域。等到初始化结束,这个作用域就会消失。
举例子:此处的参数y获得了参数X传来的值,而非全局x

var x = 1;

function f(x, y = x) {
  console.log(y);
}

f(2) // 2
var x = 1;

function foo(x = x) {
  // ...
}

foo() // ReferenceError: x is not defined

快捷链接

全部React学习笔记的目录 Click Here>>
全部Javascript学习笔记的目录 Click Here>>
Less学习笔记 Click Here>>
安利一波前端开发推荐使用的工具 Click Here>>
ESLint问题记录 Click Here>>
github各类实战练习源码下载 Click Here>>
如果你觉得我的东西能帮到你,无限欢迎给我的github库点个收藏Star~0v 0~

你可能感兴趣的:(前端(js,html,css,less))