首页 web前端 js教程 ECMAScript6函数默认参数_javascript技巧

ECMAScript6函数默认参数_javascript技巧

May 16, 2016 pm 03:55 PM
默认参数

语言更新时每一个新增的特性都是从千百万开发者需求里提取过来的,规范采用后能减少程序员的痛苦,带来便捷。

我们经常会这么写

function calc(x, y) {
  x = x || 0;
  y = y || 0;
  // to do with x, y
  // return x/y
}
登录后复制

简单说就是x,y提供了一个默认值为0,不传时x, y以值0来运算。传了就以实际值计算。

又如定义一个ajax

function ajax(url, async, dataType) {
  async = async !== false
  dataType = dataType || 'JSON'
  // ...
}
登录后复制

自己用原生JS封装的一个简易ajax函数,url必填,async和dataType可选,即不填时默认同步请求和返回JSON格式数据。

再如定义一个矩形类

function Rectangle(width, height) {
  this.width = width || 200;
  this.height = height || 300;
}
登录后复制

new时不传任何参数,也会创建一个默认宽高为200*300的矩形。

无论是calc,ajax函数还是Rectangle类,我们都需要在函数体内做默认值的处理,如果语言自身处理岂不乐哉? ES6提供了该特性(Default Parameters),以下是用ES6新特性重写的calc,ajax,Rectangle。

function calc(x=0, y=0) {
  // ...
  console.log(x, y)
}
calc(); // 0 0
calc(1, 4); // 1 4
 
function ajax(url, async=true, dataType="JSON") {
  // ...
  console.log(url, async, dataType)
}
ajax('../user.action'); // ../user.action true JSON
ajax('../user.action', false); // ../user.action false JSON
ajax('../user.action', false, 'XML'); // ../user.action false XML
 
function Rectangle(width=200, height=300) {
  this.width = width;
  this.height = height;
}
var r1 = new Rectangle(); // 200*300的矩形
var r2 = new Rectangle(100); // 100*300的矩形
var r3 = new Rectangle(100, 500); // 100*500矩形
登录后复制

可以看到,ES6把默认值部分从大括号移到了小括号里,还减少了“||”运算,函数体从此瘦身了。参数默认值嘛,本来就应该在定义参数的地方,这样看起来简洁了不少。O(∩_∩)O

默认参数可以定义在任意位置,比如在中间定义一个

function ajax(url, async=true, success) {
  // ...
  console.log(url, async, success)
}
登录后复制

定义了一个默认参数async,url和success是必传的,这时需要把中间的参数置为undefined

ajax('../user.action', undefined, function() {
   
})
登录后复制

注意,不要想当然的把undefined改为null, 即使 null == undefined, 传null后,函数体内的async就是null不是true了。

以下几点需要注意:

1. 定义了默认参数后,函数的length属性会减少,即有几个默认参数不包含在length的计算当中

function calc(x=0, y=0) {
  // ...
  console.log(x, y)
}
function ajax(url, async=true, dataType="JSON") {
  // ...
  console.log(url, async, dataType)
}
console.log(calc.length); // 0
console.log(ajax.length); // 1

登录后复制

2. 不能用let和const再次声明默认值,var可以

function ajax(url="../user.action", async=true, success) {
  var url = ''; // 允许
  let async = 3; // 报错
  const success = function(){}; // 报错
}

登录后复制

另外比较有趣的是:默认参数可以不是一个值类型,它可以是一个函数调用

function getCallback() {
  return function() {
    // return code
  }
}
 
function ajax(url, async, success=getCallback()) {
  // ...
  console.log(url, async, success)
}
登录后复制

可以看到这里参数success是一个函数调用,调用ajax时如果没有传第三个参数,则会执行getCallback函数,该函数返回一个新函数赋值给success。这是一个很强大的功能,给程序员以很大的想象发挥空间。

例如,利用这个特性可以强制指定某参数必须传,不传就报错

function throwIf() {
  throw new Error('少传了参数');
}
 
function ajax(url=throwIf(), async=true, success) {
  return url;
}
ajax(); // Error: 少传了参数
登录后复制

以上所述就是本文的全部内容了,希望大家能够喜欢。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C++ 函数声明中的默认参数:全面解析其声明和用法 C++ 函数声明中的默认参数:全面解析其声明和用法 May 02, 2024 pm 03:09 PM

C++中的默认参数提供对函数参数指定默认值的功能,从而增强代码可读性、简洁性和灵活性。声明默认参数:在函数声明中将参数后加上"="符号,后跟默认值。用法:函数调用时,若未提供可选参数,则会使用默认值。实战案例:计算两个数之和的函数,一个参数必填,另一个可填并有默认值0。优点:增强可读性、增加灵活性、减少样板代码。注意事项:只能在声明中指定,必须位于末尾,类型必须兼容。

如何优化 C++ 函数中默认参数和可变参数的使用 如何优化 C++ 函数中默认参数和可变参数的使用 Apr 20, 2024 am 09:03 AM

优化C++默认和可变参数函数:默认参数:允许函数使用默认值,减少冗余。将默认参数放在最后以提高可读性。使用constexpr默认参数以减少开销。使用结构化绑定以提高复杂默认参数的可读性。可变参数:允许函数接受数量不定的参数。尽量避免使用可变参数,并在必要时使用。使用std::initializer_list优化可变参数函数以提高性能。

C++ 默认参数的用法和优势 C++ 默认参数的用法和优势 Apr 18, 2024 pm 09:33 PM

是的,C++中的默认参数功能允许您在函数调用时省略某些参数,当函数被调用且未提供这些参数时,则使用默认值,从而提升代码的灵活性、可读性和可维护性。

C++ 函数中默认参数的注意事项 C++ 函数中默认参数的注意事项 Apr 20, 2024 am 11:09 AM

C++函数中默认参数需要注意:必须出现在参数列表末尾。不可为同一参数指定多个默认值。vararg可变数量参数不可拥有默认值。默认参数不可被重载函数的参数共享。

C++ 函数的默认参数的使用方法是什么? C++ 函数的默认参数的使用方法是什么? Apr 19, 2024 pm 03:21 PM

默认参数允许函数在调用时指定默认值,简化代码并提高维护性。默认参数的语法为:typefunction_name(parameter_list,typeparameter_name=default_value)。其中,type为参数类型,parameter_name为参数名称,default_value为默认值。示例中,add函数具有两个参数,其中num2的默认值为0,调用函数时可仅指定num1,num2将使用默认值,或同时指定num1和num2。

PHP默认参数的妙用:提高代码效率的秘诀 PHP默认参数的妙用:提高代码效率的秘诀 Mar 24, 2024 am 10:33 AM

PHP是一种广泛使用的服务器端脚本语言,用于开发动态网页和应用程序。在PHP中,使用默认参数可以极大地提高代码的效率和简洁性。本文将探讨如何利用PHP的默认参数功能,以实现更高效的编程。1.默认参数的概念在PHP函数中,我们可以为参数设置默认值。当函数调用时未提供参数值时,将会使用默认值代替。这样做可以简化函数调用,减少冗余代码,提高可读性。2.默认参数

PHP 函数的参数传递方式如何处理可选参数和默认参数? PHP 函数的参数传递方式如何处理可选参数和默认参数? Apr 15, 2024 pm 09:51 PM

参数传递方式:按值传递(基本类型)和按引用传递(复合类型)。可选参数:允许指定参数值,但不是必需的。默认参数:允许指定可选参数的默认值。实战:通过示例函数展示如何使用可选和默认参数计算矩形面积。

C++ 函数中默认参数的使用场景分析 C++ 函数中默认参数的使用场景分析 Apr 19, 2024 pm 06:12 PM

默认参数用于简化函数调用、提供可选功能和提高代码可读性。具体场景包括:1.省略不常用的参数;2.为可选功能提供默认值;3.明确指定默认值提升代码可理解性。

See all articles