ECMAScript6函数默认参数
语言更新时每一个新增的特性都是从千百万开发者需求里提取过来的,规范采用后能减少程序员的痛苦,带来便捷。
我们经常会这么写
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时不传任何参数,也会创建一个默认宽高为200300的矩形。
无论是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(); // 200300的矩形 var r2 = new Rectangle(100); // 100300的矩形 var r3 = new Rectangle(100, 500); // 100500矩形
可以看到,ES6把默认值部分从大括号移到了小括号里,还减少了“||”运算,函数体从此瘦身了。参数默认值嘛,本来就应该在定义参数的地方,这样看起来简洁了不少。O(∩_∩)O
默认参数可以定义在任意位置,比如在中间定义一个
function ajax(url, async=true, suess) { // ... console.log(url, async, suess) }
定义了一个默认参数async,url和suess是必传的,这时需要把中间的参数置为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, suess) { var url = ''; // 允许 let async = 3; // 报错 const suess = function(){}; // 报错 }
比较有趣的是默认参数可以不是一个值类型,它可以是一个函数调用
function getCallback() { return function() { // return code } } function ajax(url, async, suess=getCallback()) { // ... console.log(url, async, suess) }
可以看到这里参数suess是一个函数调用,调用ajax时如果没有传第三个参数,则会执行getCallback函数,该函数返回一个新函数赋值给suess。这是一个很强大的功能,给程序员以很大的想象发挥空间。
例如,利用这个特性可以强制指定某参数必须传,不传就报错
function throwIf() { throw new Error('少传了参数'); } function ajax(url=throwIf(), async=true, suess) { return url; } ajax(); // Error: 少传了参数
以上所述就是本文的全部内容了,希望大家能够喜欢。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程