ES6---函数的扩展之函数的默认值

1.函数默认值

function add(a,b=3){
    return a+b;
}
add(1,2);//3
add(1);//4

理解起来也很简单,就是在函数定义的时候设置一个默认值,当调用函数没有传参时,可以根据默认值为其匹配一个参数值

这样子的好处嘛,可以避免在调用时没有传参导致函数报错,同时对于阅读代码也更加直观了,代码量也更少了,嘻嘻

  • 直观是因为我们只需要看函数就知道该参数是否可选
  • 代码更少是因为在ES6以前,函数不能设置默认值,如果在调用的时候没有传参进去,

   那么需要进行是否传递该参数进来,没有的话就取一个默认值才能达到实现的效果

function add(a,b){
if(b==undefined){
  b=3;
}
  return a+b;
}add(1);//4add(1,2);//3

但记得注意一下几点:

1.若使用了函数默认值,则函数所有参数等同于在函数内默认声明过了,所以不能使用let和const定义同名参数

//函数会报错function add(a,b=3){
  const a = 1;  let b = 2;
  return a+b;
}

记得var定义同名参数是可以的,这是由于var是定义的全局变量,懂函数作用域链的应该都挺容易理解的

2.若使用函数默认值,则参数不能出现同名参数(ES6以前同名函数是允许的,因为只需要考虑调用时参数传递顺序即可)

//这种不报错
function add(a,a,b){
 . . .
}

//报错了
function add(a,a,b=3){
. . .
}

3.函数默认值是惰性求值的,他不是直接传参数值进去的,而是当调用时没有参数时计算默认值再赋值给,所以参数的默认值可以是一个表达式

let x = 100
function add(a,b=x+1){
  return a+b;
}
add(1);//101add(1,2);//3

4.关于函数默认值的位置(你品你细品),你就会发现,上边例子中完全没有在第一个参数写上默认值(实际上只是偷懒只写一个例子┗( ▔, ▔ )┛)

 如果默认值,设置在参数a的话,那么可以在调用时是可以不传第一个参数吗?

答案是:No!一般函数默认值写在最后一个参数或者下一个参数仍设置默认值(直接所有参数都写了默认值就不用考虑,哈哈),对于那种跳过式的如

function(a=3,b){} ; function(a,b=3,c){}

像上述情况,默认值前面的参数,调用时不能直接省略掉,因为函数参数读取是按顺序的(#皿#)  

所以遇到这种情况,请放弃这种写法(开玩笑的啦,哈哈!!!∑(?Д?ノ)ノ)

在调用的时候使用undefined(不能使用null,null代表传进去参数的值为null),代表该参数不传参进去,就会使用默认值了

function add(a=3,b){
    return a+b;
}
 add(1);//NaN,此时b为undefined,所以相加为NaN
add(,1);//报错
add(undefined,1)://4,正确操作
add(null,1);//1,a就为空值,就是0了呗

原文地址:https://www.cnblogs.com/kongbaifeiye/p/12601778.html

时间: 2024-10-06 19:57:31

ES6---函数的扩展之函数的默认值的相关文章

C++对C的函数的扩展==》函数参数相关扩展

三块内容:1 默认参数 2 函数占位参数 3 默认参数和占位参数 1 默认参数 2 占位参数 3 默认参数和占位参数

None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素

1 >>> def add_and_maybe_multiply(a,b,c=None): 2 result = a+b 3 if c is not None: 4 result = result*c 5 return result 6 7 >>> add_and_maybe_multiply(2,3,' ')#实参为空格,返回空格 8 ' ' 9 >>> add_and_maybe_multiply(2,3,'')#实参为空,返回为空 10 '' 1

ES6 随记(3.4.1)-- 函数的拓展(参数默认值,扩展运算符)

上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 3. ES6 随记(3.1)-- 字符串的拓展 4. ES6 随记(3.2)-- 正则的拓展 & 数值的拓展 5. ES6 随记(3.3)-- 数组的拓展 4. 拓展 e. 函数的拓展 · 参数默认值.此节与结构赋值关系甚大,可去往前文再看一次 再来烧脑的重新打开这个蛋疼的案例, function fn1({x = 0, y = 0} = {}) { console.log(x, y);

ES6 入门系列 - 函数的扩展

1函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console.log(x, y); } log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', '') // Hello World 上面代码检查函数log的参数y有没有赋值,如果没有,则指定默认值为World.这种写法的

ES6 - Note3:数组、对象与函数的扩展

一.数组的扩展,ES6在数组扩展了一些API,以实现更多的功能 1.Array.from:可以将类数组和可遍历的数据结构转换成真正的数组,如下所示 var a = { '0':1,'1':1,length:2 }; var arr = Array.from(a); console.log(arr) Array [ 1, 1 ] ---------------ES5的实现----------- var arr = [].slice.call(a); console.log(arr) Array [

SQL 自定义函数(Function)——参数默认值

sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END 语句括起来的函数体,返回值

1.不要使用可变对象作为函数默认值

1 In [1]: def append_to_list(value, def_list=[]): 2 ...: def_list.append(value) 3 ...: return def_list 4 ...: 5 In [2]: my_list = append_to_list(1) 6 In [3]: my_list 7 Out[3]: [1] 8 In [4]: my_other_list = append_to_list(2) 9 In [5]: my_other_list 10

SQL Server 自定义函数(Function)——参数默认值

原文:SQL Server 自定义函数(Function)--参数默认值 sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,

38 py改变函数参数的值关键字参数和参数默认值函数中可变参数将序列中的元素值作为函数对应的参数值传

第五课:改变函数参数的值 一个python函数可以有任意多个参数,在一个函数的外部来定义变量,然后把变量作为参数传入到函数内,并且在函数的内部来修改函数的参数值,函数结束之后,这些变量的值在如何变化呢? 给函数传递值有2种:1种是值传递,1种是引用传递 # 改变函数参数的值 # 值传递(数值.字符串.布尔 这些都是值传递) 在函数的内部修改变量值,不改变原参数定义的参数值,解释为: 这个在函数中不会改变原来定义(函数外部)的值 这是因为函数里面会有一个占的概念,外边的变量的值会复制给 占 里面,