es6(五):函数的扩展
生活随笔
收集整理的這篇文章主要介紹了
es6(五):函数的扩展
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
函數(shù)參數(shù)的默認(rèn)值
function log(x, y = 'World') {console.log(x, y); }log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', '') // Hellofunction Point(x = 0, y = 0) {this.x = x;this.y = y; }var p = new Point(); p // { x: 0, y: 0 }函數(shù)length 的屬性
指定了默認(rèn)值以后,函數(shù)的length屬性,將返回沒(méi)有指定默認(rèn)值的參數(shù)個(gè)數(shù)。也就是說(shuō),指定了默認(rèn)值后,length屬性將失真。
(function (a) {}).length // 1 (function (a = 5) {}).length // 0 (function (a, b, c = 5) {}).length // 2如果設(shè)置了默認(rèn)值的參數(shù)不是尾參數(shù),那么length屬性也不再計(jì)入后面的參數(shù)了
(function (a = 0, b, c) {}).length // 0 (function (a, b = 1, c) {}).length // 1作用域
var x = 1;function f(x, y = x) {console.log(y); }f(2) // 2上面代碼中,參數(shù)y的默認(rèn)值等于x。調(diào)用時(shí),由于函數(shù)作用域內(nèi)部的變量x已經(jīng)生成,所以y等于參數(shù)x,而不是全局變量x。
let x = 1;function f(y = x) {let x = 2;console.log(y); }f() // 1上面代碼中,函數(shù)調(diào)用時(shí),y的默認(rèn)值變量x尚未在函數(shù)內(nèi)部生成,所以x指向全局變量。
應(yīng)用
利用參數(shù)默認(rèn)值,可以指定某一個(gè)參數(shù)不得省略,如果省略就拋出一個(gè)錯(cuò)誤。
function throwIfMissing() {throw new Error('Missing parameter'); }function foo(mustBeProvided = throwIfMissing()) {return mustBeProvided; }foo();rest參數(shù)
function add(...values) {let sum = 0;for (var val of values) {sum += val;}return sum; }add(2, 5, 3) // 10 // arguments變量的寫(xiě)法 function sortNumbers() {return Array.prototype.slice.call(arguments).sort(); }// rest參數(shù)的寫(xiě)法 const sortNumbers = (...numbers) => numbers.sort(); function push(array, ...items) {items.forEach(function(item) {array.push(item);console.log(item);}); }var a = []; push(a, 1, 2, 3)函數(shù)的length屬性,不包括rest參數(shù)。
(function(a) {}).length // 1 (function(...a) {}).length // 0 (function(a, ...b) {}).length // 1擴(kuò)展運(yùn)算符
function push(array, ...items) {array.push(...items); }function add(x, y) {return x + y; }var numbers = [4, 38]; add(...numbers) // 42替代數(shù)組的apply方法
// ES5的寫(xiě)法 function f(x, y, z) {// ... } var args = [0, 1, 2]; f.apply(null, args);// ES6的寫(xiě)法 function f(x, y, z) {// ... } var args = [0, 1, 2]; f(...args); // ES5的寫(xiě)法 Math.max.apply(null, [14, 3, 77])// ES6的寫(xiě)法 Math.max(...[14, 3, 77])// 等同于 Math.max(14, 3, 77); // ES5的寫(xiě)法 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; Array.prototype.push.apply(arr1, arr2);// ES6的寫(xiě)法 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; arr1.push(...arr2);合并數(shù)組
// ES5 [1, 2].concat(more) // ES6 [1, 2, ...more]var arr1 = ['a', 'b']; var arr2 = ['c']; var arr3 = ['d', 'e'];// ES5的合并數(shù)組 arr1.concat(arr2, arr3); // [ 'a', 'b', 'c', 'd', 'e' ]// ES6的合并數(shù)組 [...arr1, ...arr2, ...arr3] // [ 'a', 'b', 'c', 'd', 'e' ]實(shí)現(xiàn)了Iterator接口的對(duì)象
var nodeList = document.querySelectorAll('div'); var array = [...nodeList];箭頭函數(shù)
var f = v => v;等同于
var f = function(v) {return v; };尾調(diào)用,尾遞歸
總結(jié)
以上是生活随笔為你收集整理的es6(五):函数的扩展的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 典型的 C++ 程序员成长经历
- 下一篇: 一张浓缩大学生活的顶级报(转载)