0
点赞
收藏
分享

微信扫一扫

ECMAScript6新特性【函数的扩展(函数参数的默认值、箭头函数、rest 参数、name 属性) 】(六)-全面详解(学习总结---从入门到深化)


ECMAScript6新特性【函数的扩展(函数参数的默认值、箭头函数、rest 参数、name 属性) 】(六)-全面详解(学习总结---从入门到深化)_开发语言

👏作者简介:大家好,我是小童,Java开发工程师,Java领域新星创作者
📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶

🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人

函数的扩展_函数参数的默认值

ECMAScript6新特性【函数的扩展(函数参数的默认值、箭头函数、rest 参数、name 属性) 】(六)-全面详解(学习总结---从入门到深化)_ecmascript_02

 基本用法

ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法

function log(info) {
    info = info || 'World';
    console.log(info);
}
log();

ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面

function log(info = 'world') {
    console.log(info);
}
log();

除了简洁,ES6 的写法还有两个好处:首先,阅读代码的人,可以立刻意识到哪些参数是可以省略的

另外,一个容易忽略的地方是,参数默认值不是传值的,而是每次 都重新计算默认值表达式的值。也就是说,参数默认值是惰性求值的。

let x = 99;
function add(p = x + 1) {
    console.log(p);
}
add() // 100
x = 100;
add() // 101

参数默认值的位置

function add(x = 1, y) {
    console.log(x+y);
}
add(10) // NaN

函数的 length 属性

指定了默认值以后,函数的 length 属性,将返回没有指定默认值的参数个数。也就是说,指定了默认值后, length 属性将失真

function fn1(x){}
console.log(fn1.length); // 1
function fn2(x=1){}
console.log(fn2.length); // 0

应用

利用参数默认值,可以指定某一个参数不得省略,如果省略就抛出 一个错误

function missingParameter() {
    throw new Error('Missing parameter');
}
function add(x = missingParameter()) {
    console.log(x);
}
add() // Missing parameter

实时效果反馈

1. 下列代码运算结果是多少:

function fn1(x,y=10) { } console.log(fn1.length);

A 0

B 1

C 2

D 报错

 函数的扩展_箭头函数

ECMAScript6新特性【函数的扩展(函数参数的默认值、箭头函数、rest 参数、name 属性) 】(六)-全面详解(学习总结---从入门到深化)_默认值_03

 基本用法

ES6 允许使用“箭头”( => )定义函数

var add = (x) => x;
// 等同于
var add = function (x) {
    return x;
};

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分

var add = (x,y) => x+y;
// 等同于
var add = function (x,y) {
    return x+y;
};
var add = () => 100;
// 等同于
var add = function () {
    return 100;
};

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用 return 语句返回

var add = (x,y) => {
    var z = 10;
    return x+y+z
};
// 等同于
var add = function (x,y) {
    var z = 100
    return x+y+z
};

 由于大括号被解释为代码块,所以如果箭头函数直接返回一个对 象,必须在对象外面加上括号,否则会报错。

var add = (x,y) => ({x:10,y:20});

箭头函数的一个用处是简化回调函数

var arr = [10,20,30]
arr.map(item =>{
    console.log(item);
})

使用注意点

箭头函数有几个使用注意点

1 箭头函数没有自己的 this 对象

2 不可以当作构造函数,也就是说,不可以对箭头函数使用 new 命令,否则会抛出一个错误 3 不可以使用 arguments 对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替 4 不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数

 最重要的是第一点。对于普通函数来说,内部的 this 指向函数运行时所在的对象,但是这一点对箭头函数不成立。它没有自己的 this 对 象,内部的 this 就是定义时上层作用域中的 this 。也就是说,箭头函数内部的 this 指向是固定的,相比之下,普通函数的 this 指向是可变的。

var name = "itxiaotong"
var user = {
    name:"iwen",
    getName(){
        setTimeout(() =>{
            console.log(this.name); // iwen
       })
   }
}
user.getName()

温馨提示

箭头函数里面根本没有自己的 this ,而是引用外层的 this

 长期以来,JavaScript 语言的 this 对象一直是一个令人头痛的问题, 在对象方法中使用 this ,必须非常小心。箭头函数”绑定” this ,很大 程度上解决了这个困扰。

 实时效果反馈

1. 下列代码运行结果是多少:

var name = "itxiaotong" var user = { name:"iwen", getName(){ setTimeout(() =>{ console.log(this.name); }) } } user.getName()

A itxiaotong

B iwen

C null

D 报错

 函数的扩展_其他

ECMAScript6新特性【函数的扩展(函数参数的默认值、箭头函数、rest 参数、name 属性) 】(六)-全面详解(学习总结---从入门到深化)_ES6_04

 rest 参数

ES6 引入 rest 参数(形式为 ...变量名 ),用于获取函数的多余参数, 这样就不需要使用 arguments

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

注意,rest 参数之后不能再有其他参数(即只能是最后一个参 数),否则会报错

function add(a, ...b,c) {} // 报错

函数的 length 属性,不包括 rest 参数

function add(a, ...b) {}
console.log(add.length); // 1

严格模式

从 ES5 开始,函数内部可以设定为严格模式

function doSomething(a, b) {
  'use strict';
  // code
}

ES2016 做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式, 否则会报错。

// 报错
function doSomething(a, b = a) {
  'use strict';
  // code
}

name 属性

函数的 name 属性,返回该函数的函数名

function foo() {}
foo.name // "foo"

这个属性早就被浏览器广泛支持,但是直到 ES6,才将其写入了标准

 实时效果反馈

1. 下列代码运行结果是多少:

function add(a,b, ...c) {} console.log(add.length);

A 0

B 1

C 2

D 3

举报

相关推荐

0 条评论