ES6--函数
来源:互联网 发布:windows数字签名 编辑:程序博客网 时间:2024/05/22 10:16
默认参数
定义函数的时候指定参数的默认值了
function sayHello(name){ //传统的指定默认参数的方式 var name = name||'hubwiz'; document.write('Hello '+name);}//运用ES6的默认参数function sayHello2(name='hubwiz'){ document.write(`Hello ${name}`);}sayHello(); //输出:Hello hubwizsayHello('汇智网'); //输出:Hello 汇智网sayHello2(); //输出:Hello hubwizsayHello2('汇智网'); //输出:Hello 汇智网
rest参数
rest参数(形式为“…变量名”)可以称为不定参数,用于获取函数的多余参数,这样就不需要使用
arguments对象了。
rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
不定参数的格式是三个句点后跟代表所有不定参数的变量名。比如以上示例中,...values 代表了所有传入add函数的参数。function add(...values) { let sum = 0; for (var val of values) { sum += val; } return sum;}add(1, 2, 3) // 6
扩展运算符 传递函数参数
扩展运算符(spread)是三个点(…)。它好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序
列。该运算符主要用于函数调用。
它允许传递数组或者类数组直接做为函数的参数而不用通过apply。
var people=['张三','李四','王五'];//sayHello函数本来接收三个单独的参数people1,people2和people3function sayHello(people1,people2,people3){ document.write(`Hello ${people1},${people2},${people3}`);}//但是我们将一个数组以拓展参数的形式传递,它能很好地映射到每个单独的参数sayHello(...people); //输出:Hello 张三,李四,王五 //而在以前,如果需要传递数组当参数,我们需要使用函数的apply方法sayHello.apply(null,people); //输出:Hello 张三,李四,王五
箭头函数
var array = [1, 2, 3];//传统写法array.forEach(function(v, i, a) { document.write(v);});//ES6array.forEach(v => document.write(v));它们同时支持表达式体和语句体。与(普通的)函数所不同的是,箭头函数和其上下文中的代码共享同一个具有词法作用域的this。var evens = [1,2,3,4,5];var fives = [];// 表达式体var odds = evens.map(v => v + 1);var nums = evens.map((v, i) => v + i);var pairs = evens.map(v => ({even: v, odd: v + 1}));// 语句体nums.forEach(v => { if (v % 5 === 0) fives.push(v);});document.write(fives);// 具有词法作用域的 thisvar bob = { _name: "Bob", _friends: ["Amy", "Bob", "Cinne", "Dylan", "Ellen"], printFriends() { this._friends.forEach(f => document.write(this._name + " knows " + f));//this:为bob对象,而不是正在使用的对象 }}bob.printFriends();箭头函数有几个使用注意点。1.函数体内的this对象,绑定定义时所在的对象,而不是使用时所在的对象。2.不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。3.不可以使用arguments对象,该对象在函数体内不存在。
函数绑定
函数绑定运算符是并排的两个双引号(::),双引号左边是一个对象,右边是一个函数。该运算符会自动将左
边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。
let log = ::console.log;// 等同于var log = console.log.bind(console);foo::bar;// 等同于bar.call(foo);foo::bar(...arguments);i// 等同于bar.apply(foo, arguments);
尾调用优化
什么是尾调用?
尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。
“尾调用优化”(Tail call optimization),即只保留内层函数的调用帧,这样可以节省内存。
function f(x){ return g(x);}函数f的最后一步是调用函数g,这就叫尾调用。尾调用由于是函数的最后一步操作,所以不需要保留外层函数的调用记录,因为调用位置、内部变量等信息都不会再用到了,只要直接用内层函数的调用记录,取代外层函数的调用记录就可以了
0 0
- ES6--函数
- es6-函数
- 【es6】函数
- ES6 Generator函数
- ES6--函数扩展
- es6的Generator函数
- es6函数的扩展
- ES6 中的箭头函数
- ES6 箭头函数 柯里化
- ES6箭头函数=>
- es6箭头函数
- ES6箭头函数
- ES6箭头函数小结
- es6 javascript 函数绑定
- es6箭头函数
- ES6 箭头函数
- ES6中的Generator函数
- ES6 函数扩展
- DrawerLayout报错的解决
- auto、static、register、extern
- Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递
- 线程并发测试服务器性能
- test
- ES6--函数
- linux设备上的Onvif 实现1: 研究计划
- 记一次有意义的内存bug调试(完)
- Android-Universal-Image-Loader三大组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration详解
- caxa电子图板2016R1下载 64位/32位
- 去除优酷、土豆、酷六、百度、奇艺、CNTV、新浪、乐视、搜狐等视频网站15秒广告的方法
- 工具软件界的奇葩公司-Ashampoo
- Notepad++使用笔记
- CSS的组成,三种样式(内联式,嵌入式,外部式),优先级