欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ES6新特性之函數(shù)的擴展實例詳解

 更新時間:2017年04月01日 11:55:22   作者:我的老婆是校花  
這篇文章主要介紹了ES6新特性之函數(shù)的擴展,實例形式較為詳細(xì)的分析了ES6針對函數(shù)參數(shù)、運算符及相關(guān)新特性的擴展操作與注意事項,需要的朋友可以參考下

本文實例講述了ES6新特性之函數(shù)的擴展。分享給大家供大家參考,具體如下:

一、函數(shù)參數(shù)默認(rèn)值

1. ES6允許為函數(shù)的參數(shù)設(shè)置默認(rèn)值,即直接寫在參數(shù)定義的后面。

function log(x, y = 'World') {
  console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

這種寫法有兩個好處:首先,閱讀代碼的人,可以立刻意識到哪些參數(shù)是可以省略的,不用查看函數(shù)體或文檔;其次,有利于將來的代碼優(yōu)化,即使未來的版本在對外接口中,徹底拿掉這個參數(shù),也不會導(dǎo)致以前的代碼無法運行。

參數(shù)變量是默認(rèn)聲明的,所以不能用let或const再次聲明。否則會報錯。

2. 參數(shù)默認(rèn)值可以與解構(gòu)賦值的默認(rèn)值,結(jié)合起來使用。

function foo({x, y = 5}) {
  console.log(x, y);
}
foo({}) // undefined, 5
foo({x: 1}) // 1, 5
foo({x: 1, y: 2}) // 1, 2
foo() // TypeError: Cannot read property 'x' of undefined

通常情況下,定義了默認(rèn)值的參數(shù),應(yīng)該是函數(shù)的尾參數(shù)。因為這樣比較容易看出來,到底省略了哪些參數(shù)。如果非尾部的參數(shù)設(shè)置默認(rèn)值,實際上這個參數(shù)是沒法省略的。

指定了默認(rèn)值以后,函數(shù)的length屬性,將返回沒有指定默認(rèn)值的參數(shù)個數(shù)。也就是說,指定了默認(rèn)值后,length屬性將失真。

(function (a) {}).length // 1
(function (a = 5) {}).length // 0
(function (a, b, c = 5) {}).length // 2

二、rest參數(shù)

ES6引入rest參數(shù)(形式為“...變量名”),用于獲取函數(shù)的多余參數(shù),這樣就不需要使用arguments對象了。rest參數(shù)搭配的變量是一個數(shù)組,該變量將多余的參數(shù)放入數(shù)組中。

function add(...values) {
  let sum = 0;
  for (var val of values) {
    sum += val;
  }
  return sum;
}
add(2, 5, 3) // 10

上面代碼的add函數(shù)是一個求和函數(shù),利用rest參數(shù),可以向該函數(shù)傳入任意數(shù)目的參數(shù)。

注意,rest參數(shù)之后不能再有其他參數(shù)(即只能是最后一個參數(shù)),否則會報錯。

函數(shù)的length屬性,不包括rest參數(shù)。

三、擴展運算符

擴展運算符(spread)是三個點(...)。它好比rest參數(shù)的逆運算,將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列。

console.log(...[1, 2, 3])
// 1 2 3
console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5
[...document.querySelectorAll('div')]
// [<div>, <div>, <div>]

四、箭頭函數(shù)

ES6允許使用“箭頭”(=>)定義函數(shù)。箭頭函數(shù)前面是輸入,后面是輸出。inputs => outputs

var f = v => v;
//上面的箭頭函數(shù)等同于:
var f = function(v) {
 return v;
};

如果箭頭函數(shù)不需要參數(shù)或需要多個參數(shù),就使用一個圓括號代表參數(shù)部分。

var f = () => 5;
// 等同于
var f = function () { return 5 };
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
 return num1 + num2;
};

如果箭頭函數(shù)的代碼塊部分多于一條語句,就要使用大括號將它們括起來,并且使用return語句返回。

var sum = (num1, num2) => { return num1 + num2; }
//由于大括號被解釋為代碼塊,所以如果箭頭函數(shù)直接返回一個對象,必須在對象外面加上括號。
var getTempItem = id => ({ id: id, name: "Temp" });

箭頭函數(shù)可以與變量解構(gòu)結(jié)合使用。

const full = ({ first, last }) => first + ' ' + last;
// 等同于
function full(person) {
 return person.first + ' ' + person.last;
}

箭頭函數(shù)的一個用處是簡化回調(diào)函數(shù)。

// 正常函數(shù)寫法
[1,2,3].map(function (x) {
 return x * x;
});
// 箭頭函數(shù)寫法
[1,2,3].map(x => x * x);

下面是rest參數(shù)與箭頭函數(shù)結(jié)合的例子。

const numbers = (...nums) => nums;
numbers(1, 2, 3, 4, 5)
// [1,2,3,4,5]

箭頭函數(shù)有幾個使用注意點。

(1)函數(shù)體內(nèi)的this對象,就是定義時所在的對象,而不是使用時所在的對象。
(2)不可以當(dāng)作構(gòu)造函數(shù),也就是說,不可以使用new命令,否則會拋出一個錯誤。
(3)不可以使用arguments對象,該對象在函數(shù)體內(nèi)不存在。如果要用,可以用Rest參數(shù)代替。
(4)不可以使用yield命令,因此箭頭函數(shù)不能用作Generator函數(shù)。

上面四點中,第一點尤其值得注意。this對象的指向是可變的,但是在箭頭函數(shù)中,它是固定的。

五、函數(shù)參數(shù)的尾逗號

ECMAScript 2017將函數(shù)的最后一個參數(shù)有尾逗號(trailing comma)。

此前,函數(shù)定義和調(diào)用時,都不允許最后一個參數(shù)后面出現(xiàn)逗號。

function clownsEverywhere(
  param1,
  param2
) { /* ... */ }

上面代碼中,如果在param2或bar后面加一個逗號,就會報錯。

這樣的話,如果以后修改代碼,想為函數(shù)clownsEverywhere添加第三個參數(shù),就勢必要在第二個參數(shù)后面添加一個逗號。這對版本管理系統(tǒng)來說,就會顯示,添加逗號的那一行也發(fā)生了變動。這看上去有點冗余,因此新的語法允許定義和調(diào)用時,尾部直接有一個逗號。

function clownsEverywhere(
  param1,
  param2,
) { /* ... */ }

希望本文所述對大家ECMAScript程序設(shè)計有所幫助。

相關(guān)文章

  • 有關(guān)json_decode亂碼及NULL的問題

    有關(guān)json_decode亂碼及NULL的問題

    json decode出現(xiàn)中文亂碼,返回null,很多朋友都遇到過吧,該怎么解決呢?下面小編把解決辦法分享在腳本之家網(wǎng)站上,供大家學(xué)習(xí)
    2015-10-10
  • 在Js頁面通過POST傳遞參數(shù)跳轉(zhuǎn)到新頁面詳解

    在Js頁面通過POST傳遞參數(shù)跳轉(zhuǎn)到新頁面詳解

    這篇文章主要給大家介紹了關(guān)于在Js頁面通過POST傳遞參數(shù)跳轉(zhuǎn)到新頁面的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • js預(yù)載入和JavaScript Image()對象使用介紹

    js預(yù)載入和JavaScript Image()對象使用介紹

    為了解決在canvas使用drawImage()時,遇到img對象來不及加載的問題; 我最終在html文檔加載中,使用了下面"數(shù)組加載圖像的辦法”解決,如果有其他方法,請給予指點!
    2011-08-08
  • 查找頁面中所有類為test的結(jié)點的方法

    查找頁面中所有類為test的結(jié)點的方法

    這篇文章主要介紹了查找頁面中所有類為test結(jié)點的方法,需要的朋友可以參考下
    2014-03-03
  • THREE.JS使用TransformControls對模型拖拽的代碼實例

    THREE.JS使用TransformControls對模型拖拽的代碼實例

    拖拽是前端實現(xiàn)中比較常用的一種效果,下面這篇文章主要給大家介紹了關(guān)于THREE.JS使用TransformControls對模型拖拽的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • JS將指定的某個字符全部轉(zhuǎn)換為其他字符實例代碼

    JS將指定的某個字符全部轉(zhuǎn)換為其他字符實例代碼

    這篇文章主要給大家介紹了關(guān)于JS如何將指定的某個字符全部轉(zhuǎn)換為其他字符的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • JS如何實現(xiàn)基于websocket的多端橋接平臺

    JS如何實現(xiàn)基于websocket的多端橋接平臺

    我們在調(diào)試過程使用的工具有:modheader,postman等,但這些工具都會存在的問題:缺少客戶端里相應(yīng)的設(shè)備信息;即使將cookie信息復(fù)制出來,也是存在過期的問題;多個設(shè)備之間切換時不方便;針對這些存在的問題,我基于websocket雙向通信的特點,實現(xiàn)了多端橋接管理平臺
    2021-05-05
  • innerHTML中標(biāo)簽可以換行的方法匯總

    innerHTML中標(biāo)簽可以換行的方法匯總

    本文給大家分享的是一個在javascript中使用innerhtml輸出的時候如何實現(xiàn)換行的小技巧,其實很簡單,在需要換行的地方加上\即可
    2015-08-08
  • JavaScript 預(yù)解析的4種實現(xiàn)方法解析

    JavaScript 預(yù)解析的4種實現(xiàn)方法解析

    這篇文章主要介紹了JavaScript 預(yù)解析的4種實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • js鼠標(biāo)及對象坐標(biāo)控制屬性詳細(xì)解析

    js鼠標(biāo)及對象坐標(biāo)控制屬性詳細(xì)解析

    這篇文章主要是對js鼠標(biāo)及對象坐標(biāo)控制屬性進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12

最新評論