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