深入浅出ES6新特性之函数默认参数和箭头函数_javascript技巧

1、函数参数的默认值

  ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式:

  从上面的代码可以看出存在一个问题,当传入的参数为0或者false时,会直接取到后面的值,而不是传入的这个参数值。

  那怎么解决呢?对于上图的代码,可以通过判断是否传入了num参数,没有就用默认值:

  这种做法还是很麻烦的,而ES6则直接在参数定义里面设置函数参数的默认值,而且不用担心传入参数是0或者false会出错了:

2、箭头函数

  箭头函数用 => 符号来定义。

  箭头函数相当于匿名函数,所以采用函数表达式的写法。

  左边是传入函数的参数,右边是函数中执行的语句。

  

  上面是完整的写法,左边小括号,右边大括号,而下面的情况可以简写:

  (1)当要执行的代码块只有一条return语句时,可省略大括号和return关键字:

  箭头函数在回调函数中是很简洁的,像这样:

  需要注意的是, 箭头函数没有自己的this、arguments、super、new.target,它们分别指向外层函数的相应变量。

以前在ES5中使用this有点麻烦,这种问题很常见:

  但是现在有了箭头函数,不再需要使用that = this或 _this = this 这种代码啦,因为箭头函数中的this直接就是外层函数中的this,代码更简单了:

时间: 2024-08-03 15:38:41

深入浅出ES6新特性之函数默认参数和箭头函数_javascript技巧的相关文章

javascript中函数作为参数调用的方法_javascript技巧

本文实例讲述了javascript中函数作为参数调用的方法.分享给大家供大家参考.具体分析如下: 先来看示例: function Map(){ var obj = {}; this.put = function(key, value){ obj[key] = value; } this.eachMap = function(fn){ for(var attr in obj){ fn(attr, obj[attr]); } } } var m = new Map(); m.put('01', 'a

ECMAScript6函数默认参数_javascript技巧

语言更新时每一个新增的特性都是从千百万开发者需求里提取过来的,规范采用后能减少程序员的痛苦,带来便捷. 我们经常会这么写 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 !

ES6新特性概览

本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony(和谐之意,显然没有跟上我国的步伐,我们已经进入中国梦版本了).上一次标准的制订还是2009年出台的ES5.目前ES6的标准化工作正在进行中,预计会在14年12月份放出正式敲定的版本.但大部分标准已经就绪,且各浏览器对ES6的支持也正在实现中.要查看ES6的支持情况请点此. 目前想要运行ES6代码的话

JavaScript中的Reflect对象详解(ES6新特性)_javascript技巧

Reflect介绍: Reflect这个对象在我的node(v4.4.3)中还没有实现, babel(6.7.7)也没有实现 ,新版本的chrome是支持的, ff比较早就支持Proxy和Reflect了,要让node支持Reflect可以安装harmony-reflect ; Reflect不是构造函数, 要使用的时候直接通过Reflect.method()调用, Reflect有的方法和Proxy差不多, 而且多数Reflect方法原生的Object已经重新实现了. 什么要使用Reflect

【C/C++学院】0813-C与CPP不同以及命名空间简介/函数重载与函数默认参数/泛型auto/Newdelete

C与CPP不同以及命名空间简介 命名空间在软件设计中的作用就是为了实现迭代式开发. 命名空间的别名 #include <iostream> namespace runrunrunrun { int a(10); char *str("gogogo"); namespace run //命名空间的嵌套 { int a(9); } } namespace runrunrunrun //命名空间的拓展 { int y(5); //int a(15);重定义错误 } namespa

感觉ucos里面的函数通过参数根本不知道函数想表达什么意思,

问题描述 感觉ucos里面的函数通过参数根本不知道函数想表达什么意思, 参数都是指针或结构体指针或函数指针,搞的很复杂,一定要这样吗 解决方案 是的, C语言作为一种过时的语言,不具备自动垃圾回收.所以程序员为了防止内存泄漏之类的问题,想出了各种"绝招",这些小技巧堆砌在一起,使得程序偏离了关注业务逻辑的主线.

JS函数多个参数默认值指定方法分析_javascript技巧

本文实例讲述了JS函数多个参数默认值指定方法.分享给大家供大家参考,具体如下: 函数有一个参数时,以往这样定义(参数为p1): function mfun(p1){ - } 当需要为p1设定一个默认值时 function mfun(p1){ if(p1===undefined) p1=5; //默认值设为5 - } 当函数需要2个参数时,以前习惯这样写 function mfun(p1,p2){-} 后来发现完全不需要这样写,js函数甚至不需要在括弧内预设参数名,可以用一下方式传入任意多个参数自

【matlab】设定函数默认参数

C++/java/python系列的语言,函数可以有默认值,通常类似如下的形式: funtion_name (param1, param2=default_value, ...) 到了matlab下发现并不能这样写.那是不是说matlab中希望函数有默认参数,就一定要很麻烦地,使用nargin来辅助实现呢?比如: % 第三个参数有默认值 function [result]=some_fun(param1, param2) if (nargin<3) param3 = 'default_param

javascript 函数默认参数

今天写javascript代码时,写到默认参数的问题,顺手就写成了 function openNewDiv(_id,DivHtml,newDivWidth=200,newDivHeight=300){ -- } 结果发现运行不了,就在网上查了一下,原来要这样写,在这记录一下! function openNewDiv(_id,DivHtml,newDivWidth,newDivHeight){ newDivWidth = newDivWidth||200; newDivHeight = newDi