ES6--函数
2016-01-14 10:51
176 查看
默认参数
定义函数的时候指定参数的默认值了
rest参数
rest参数(形式为“…变量名”)可以称为不定参数,用于获取函数的多余参数,这样就不需要使用
arguments对象了。
rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
扩展运算符 传递函数参数
扩展运算符(spread)是三个点(…)。它好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序
列。该运算符主要用于函数调用。
它允许传递数组或者类数组直接做为函数的参数而不用通过apply。
箭头函数
函数绑定
函数绑定运算符是并排的两个双引号(::),双引号左边是一个对象,右边是一个函数。该运算符会自动将左
边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。
尾调用优化
什么是尾调用?
尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。
“尾调用优化”(Tail call optimization),即只保留内层函数的调用帧,这样可以节省内存。
定义函数的时候指定参数的默认值了
function sayHello(name){ //传统的指定默认参数的方式 var name = name||'hubwiz'; document.write('Hello '+name); } //运用ES6的默认参数 function sayHello2(name='hubwiz'){ document.write(`Hello ${name}`); } sayHello(); //输出:Hello hubwiz sayHello('汇智网'); //输出:Hello 汇智网 sayHello2(); //输出:Hello hubwiz sayHello2('汇智网'); //输出: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和people3 function 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); }); //ES6 array.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); // 具有词法作用域的 this var 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,这就叫尾调用。 尾调用由于是函数的最后一步操作,所以不需要保留外层函数的调用记录,因为调用位置、内部变量等信息都不会再用到了,只要直接用内层函数的调用记录,取代外层函数的调用记录就可以了
相关文章推荐
- java 中的JDK封装的数据结构和算法解析(集合类)----链表 List 之 LinkedList
- 理解PHP中会话控制
- linux用户管理命令(useradd、userdel、usermod与finger)
- Android Lolipop 屏蔽隐式Intent检查引发的错误
- 最新最准确各大搜索引擎蜘蛛名称
- Android sdk配置 常见问题及处理方法——馨新欣心
- NSString什么时候用copy,什么时候用strong
- 线程并发测试服务器性能
- DrawerLayout报错的解决
- auto、static、register、extern
- svn cannot be opened because the project file cannot be parsed.
- 在MyEclipse 2014 中使用JUnit-(二)
- zz将 VSTO 插件部署给所有用户
- Webwork 学习之路(五)请求跳转前 xwork.xml 的读取
- 第三章 基于Soap的接口自动化测试实施
- Normal distribution正态分布
- oracle rac 的优点和缺点
- maven的pom介绍及配置(四)
- SSH——Hibernate初学者之旅(一)
- 百度Android工程师面试题