函数

来源:互联网 发布:大数据与银行 编辑:程序博客网 时间:2024/06/05 07:55

变量默认值

  • 不能用let或const再次声明
  • 参数默认值是惰性求值的
  • 参数默认值可以与解构赋值的默认值,结合起来使用
  • 指定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数。也就是说,指定了默认值后,length属性将失真。
  • 如果设置了默认值的参数不是尾参数,那么length属性也不再计入后面的参数了。
(function (a = 0, b, c) {}).length // 0(function (a, b = 1, c) {}).length // 1

es5中:

function a(x,y){    y=y||'aaa'    console.log(y)}

es6:

function a(x,y='aaa'){   console.log(y)}
f(, 1) // 报错f(undefined, 1) // [1, 1]//如果传入undefined,将触发该参数等于默认值,null则没有这个效果。

一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。

let x = 1;function f(y = x) {  let x = 2;  console.log(y);}f() // 1
var x = 1;function foo(x = x) {  // ...}foo() // ReferenceError: x is not defined
var x = 1;function foo(x, y = function() { x = 2; }) {  var x = 3;  y();  console.log(x);}foo() // 3x // 1

rest参数

(function(a) {}).length  // 1(function(...a) {}).length  // 0(function(a, ...b) {}).length  // 1

扩展运算符...

如同rest的逆运算

// ES5的写法function f(x, y, z) {  // ...}var args = [0, 1, 2];f.apply(null, args);// ES6的写法function f(x, y, z) {  // ...}var args = [0, 1, 2];f(...args);
0 0