最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ECMAScript6函數(shù)默認參數(shù)

 更新時間:2015年06月12日 10:00:00   投稿:hebedich  
這篇文章主要介紹了ECMAScript6函數(shù)默認參數(shù)的相關(guān)資料,需要的朋友可以參考下

語言更新時每一個新增的特性都是從千百萬開發(fā)者需求里提取過來的,規(guī)范采用后能減少程序員的痛苦,帶來便捷。

我們經(jīng)常會這么寫

function calc(x, y) {
  x = x || 0;
  y = y || 0;
  // to do with x, y
  // return x/y
}

簡單說就是x,y提供了一個默認值為0,不傳時x, y以值0來運算。傳了就以實際值計算。

又如定義一個ajax

function ajax(url, async, dataType) {
  async = async !== false
  dataType = dataType || 'JSON'
  // ...
}

自己用原生JS封裝的一個簡易ajax函數(shù),url必填,async和dataType可選,即不填時默認同步請求和返回JSON格式數(shù)據(jù)。

再如定義一個矩形類

function Rectangle(width, height) {
  this.width = width || 200;
  this.height = height || 300;
}

new時不傳任何參數(shù),也會創(chuàng)建一個默認寬高為200*300的矩形。

無論是calc,ajax函數(shù)還是Rectangle類,我們都需要在函數(shù)體內(nèi)做默認值的處理,如果語言自身處理豈不樂哉? ES6提供了該特性(Default Parameters),以下是用ES6新特性重寫的calc,ajax,Rectangle。

function calc(x=0, y=0) {
  // ...
  console.log(x, y)
}
calc(); // 0 0
calc(1, 4); // 1 4
 
function ajax(url, async=true, dataType="JSON") {
  // ...
  console.log(url, async, dataType)
}
ajax('../user.action'); // ../user.action true JSON
ajax('../user.action', false); // ../user.action false JSON
ajax('../user.action', false, 'XML'); // ../user.action false XML
 
function Rectangle(width=200, height=300) {
  this.width = width;
  this.height = height;
}
var r1 = new Rectangle(); // 200*300的矩形
var r2 = new Rectangle(100); // 100*300的矩形
var r3 = new Rectangle(100, 500); // 100*500矩形

可以看到,ES6把默認值部分從大括號移到了小括號里,還減少了“||”運算,函數(shù)體從此瘦身了。參數(shù)默認值嘛,本來就應該在定義參數(shù)的地方,這樣看起來簡潔了不少。O(∩_∩)O

默認參數(shù)可以定義在任意位置,比如在中間定義一個

function ajax(url, async=true, success) {
  // ...
  console.log(url, async, success)
}

定義了一個默認參數(shù)async,url和success是必傳的,這時需要把中間的參數(shù)置為undefined

ajax('../user.action', undefined, function() {
   
})

注意,不要想當然的把undefined改為null,  即使 null == undefined, 傳null后,函數(shù)體內(nèi)的async就是null不是true了。

以下幾點需要注意:

1. 定義了默認參數(shù)后,函數(shù)的length屬性會減少,即有幾個默認參數(shù)不包含在length的計算當中

function calc(x=0, y=0) {
  // ...
  console.log(x, y)
}
function ajax(url, async=true, dataType="JSON") {
  // ...
  console.log(url, async, dataType)
}
console.log(calc.length); // 0
console.log(ajax.length); // 1

2. 不能用let和const再次聲明默認值,var可以

function ajax(url="../user.action", async=true, success) {
  var url = ''; // 允許
  let async = 3; // 報錯
  const success = function(){}; // 報錯
}

另外比較有趣的是:默認參數(shù)可以不是一個值類型,它可以是一個函數(shù)調(diào)用

function getCallback() {
  return function() {
    // return code
  }
}
 
function ajax(url, async, success=getCallback()) {
  // ...
  console.log(url, async, success)
}

可以看到這里參數(shù)success是一個函數(shù)調(diào)用,調(diào)用ajax時如果沒有傳第三個參數(shù),則會執(zhí)行g(shù)etCallback函數(shù),該函數(shù)返回一個新函數(shù)賦值給success。這是一個很強大的功能,給程序員以很大的想象發(fā)揮空間。

例如,利用這個特性可以強制指定某參數(shù)必須傳,不傳就報錯

function throwIf() {
  throw new Error('少傳了參數(shù)');
}
 
function ajax(url=throwIf(), async=true, success) {
  return url;
}
ajax(); // Error: 少傳了參數(shù)

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • Echarts圖表中formatter的基本用法示例

    Echarts圖表中formatter的基本用法示例

    formatter 提示框浮層內(nèi)容格式器,支持字符串模板和回調(diào)函數(shù)兩種形式,下面這篇文章主要給大家介紹了關(guān)于Echarts圖表中formatter的基本用法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • javascript如何在foreach循環(huán)完成之后執(zhí)行一個回調(diào)函數(shù)

    javascript如何在foreach循環(huán)完成之后執(zhí)行一個回調(diào)函數(shù)

    forEach()是前端開發(fā)中操作數(shù)組的一種方法,主要功能是遍歷數(shù)組,其實就是 for 循環(huán)的升級版,下面這篇文章主要給大家介紹了關(guān)于javascript如何在foreach循環(huán)完成之后執(zhí)行一個回調(diào)函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 客戶端限制只能上傳jpg格式圖片的js代碼

    客戶端限制只能上傳jpg格式圖片的js代碼

    客戶端限制只能上傳jpg格式圖片的js代碼,對用戶體驗較好,適合網(wǎng)頁中只能使用jpg格式圖片的情況。
    2010-12-12
  • javascript將異步校驗表單改寫為同步表單

    javascript將異步校驗表單改寫為同步表單

    這篇文章主要介紹了javascript將異步校驗表單改寫為同步表單,需要的朋友可以參考下
    2015-01-01
  • JS優(yōu)雅的使用function實現(xiàn)一個class

    JS優(yōu)雅的使用function實現(xiàn)一個class

    這篇文章主要為大家介紹了JS優(yōu)雅的使用function實現(xiàn)一個class示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • JS前后端實現(xiàn)身份證號驗證代碼解析

    JS前后端實現(xiàn)身份證號驗證代碼解析

    這篇文章主要介紹了JS前后端實現(xiàn)身份證號驗證代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 連續(xù)操作HTMLElement對象圖文解決方法

    連續(xù)操作HTMLElement對象圖文解決方法

    Object.prototype.***不能用作在HTMLElement對象上,如本后面的抓圖所示。
    2008-03-03
  • js實現(xiàn)點擊添加一個input節(jié)點

    js實現(xiàn)點擊添加一個input節(jié)點

    本文給大家分享的是一段點擊自動添加inpu節(jié)點的代碼,非常的簡單實用,這里推薦給大家。
    2014-12-12
  • JS中比Switch...Case更優(yōu)雅的多條件判斷寫法

    JS中比Switch...Case更優(yōu)雅的多條件判斷寫法

    這篇文章主要給大家介紹了關(guān)于JS中比Switch...Case更優(yōu)雅的多條件判斷寫法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用JS具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • javascript控制臺詳解

    javascript控制臺詳解

    本文是寫在2011年,主要介紹 “Firefox” 瀏覽器插件 “Firebug” 的操作,如今主流瀏覽器對控制臺都已經(jīng)提供了很好的支持。我自己用的最多是谷歌的 “chrome” 瀏覽器,下面也用 “chrome” 瀏覽器來調(diào)試。
    2015-06-06

最新評論

怀宁县| 汉沽区| 绥江县| 德令哈市| 临江市| 铅山县| 江华| 丰台区| 贞丰县| 会昌县| 昆明市| 闻喜县| 柳林县| 墨竹工卡县| 绥江县| 同仁县| 锡林郭勒盟| 麻江县| 双柏县| 常州市| 句容市| 定兴县| 安图县| 宜春市| 逊克县| 科尔| 康平县| 南安市| 红原县| 阿拉善盟| 崇明县| 三门县| 监利县| 莆田市| 台东县| 莱西市| 禄劝| 兴文县| 临夏市| 惠来县| 鲁甸县|