深入理解ES6三

参数

  • ES6简化了为形式参数提供默认值的过程
function makeRequest(rul,timeout = 2000,callback) {
    //函数其余部分
}
  • 上面的函数只有当不为第二个参数传入值或者主动为第二个参数传入undefined时才会使用timeout的默认值
  • 在ES6中一个函数使用了默认参数值,会使得arguments对象保持与命名参数的分离,无论参数如何变化,arguments对象不再随之改变。
function mix(first,second='b') {
    console.log(arguments.length);  // 1 之传入了一个参数
    console.log(first === arguments[0])  // true
    console.log(second === aruments[1])  // false //arguments[1]是undefined
}
mix('a');
  • 默认参数表达式
    • ES6中可以使用先定义的参数作为后定义参数的默认值,但是后定义的参数不能作为先定义参数的默认值。
    • 默认参数也存在临时死区,定义参数时会为每个参数创建一个新的标识符绑定,该绑定在初始化之前不可被引用,如果访问会导致程序错误

不定参数

  • 在函数的命名参数钱添加三个点(...)就表明这是一个不定参数,该参数为一个数组,包含着自它之后出入的所有参数,通过这个数组名即可逐一访问里面的参数。
  • 不定参数的使用限制:1.每个函数最多只能声明一个不定参数,而且一定要放在所有参数的末尾。2.不定参数不能用于对象字面量setter中
  • arguments对象包含不定参数,无论是否使用不定参数,argumetns对象总是包含所有传入函数的参数

展开运算符

- 展开运算符可以让你指定一个数组,将它们打散后作为各自独立的参数传入函数
- 展开运算符的使用:例如`Math.max()`方法可以接受任意数量的参数并返回值最大的一个,但是该方法不允许传入数组。
```
// ES5使用
let values = [25,50,75,100];
console.log(Math.max.apply(Math,values)); //100

// Es6使用
console.log(Math.max(...values)); //100
```

判断函数被调用的方法

  • 在ES5中判断一个函数是否通过new关键字被调用(或者说,判断该函数是否作为构造函数被调用),最常使用的是instanceof
  • instanceof语法:Object instanceof constructor; instanceof运算符用来检测constructor.prototype是否存在于参数Object的原型链上
  • ES6引入了new.target这个元属性,元属性市值非对象的属性,其可以提供非对象目标的补充信息,当调用函数的[construct]方法时,new.target被赋值new操作符的目标,通常是新创建的对象实例。如果用[[call]]方法,则new.target的值为undefined。

块级函数

  • ES6中允许在代码块中声明函数
if(true) {
    function doSomething() {

    }
}
  • 块级函数的声明提升
    • 函数声明的块级函数会被提升至块的顶部而用let定义的函数表达式不会被提升
    • ES6严格模式下块级函数只会提升至块的顶部,但是在非严格模式下函数会被提升至外围函数或全局作用域的顶部。

箭头函数

  • 箭头函数是一种使用箭头(=>)定义函数的新语法
  • 与传统函数的不同:
    1. 没有this、super、arguments和new.target绑定 这些值由外围一层非箭头函数决定
    2. 不能通过new关键字调用 箭头函数没有[[constructor]]方法,如果通过new关键字调用箭头函数,程序会抛出错误。
    3. 没有原型 不存在prototype这个属性
    4. 不可以改变this的绑定 在函数的生命周期内始终保持一致
    5. 不支持arguments对象
    6. 不支持重复命名的参数
  • 箭头函数的语法
    1. 当箭头函数只有一个参数时,可以直接写参数名,箭头紧随其后,箭头右侧额表达式被求值后便立即返回
        let reflect = value => value;
    
    1. 如果要传入两个或两个以上的参数,要在参数的两侧添加一对小括号
    let sum = (num1,num2) => num1+num2;
    
    1. 如果函数没有参数,也要在声明的时候写一组没有内容的小括号
    let getName = () => 'Tgb';
    
    1. 可以有函数体
    let sum = (num1,num2) => {
        return num1+num2;
    }
    
    1. 箭头函数返回对象字面量
    let getTempItem = id => ({ id: id,name: 'temp' });
    
    1. 箭头函数的自调用 沙箱模式
    let person = ((name) => {
        return {
            getName: function() {
                retrun name;
            }
        };
    })('tgb');
    
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • 1.函数参数的默认值 (1).基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。
    赵然228阅读 677评论 0 0
  • 三,字符串扩展 3.1 Unicode表示法 ES6 做出了改进,只要将码点放入大括号,就能正确解读该字符。有了这...
    eastbaby阅读 1,505评论 0 8
  • 函数 函数形参的默认值 在ES5中模拟默认参数 第一种方式:缺陷: 如果给num传入值为0, 那么因为被视为fal...
    Revontulet阅读 411评论 0 0
  • 第一章 块级作用域绑定 let 和 const 都是不存在提升,声明的都是块级标识符都禁止重声明 每个const声...
    NowhereToRun阅读 1,571评论 0 2
  • 这篇文章的主要内容包括:1、在ARC中完成一个单例模式的三步2、在MRC中完成一个单例模式的三步3、单例模式通用宏...
    serenade07阅读 171评论 2 0