默认值
1.函数的参数可以设置默认值
function log(x, y = 'World') {
console.log(x, y);
}
2.length
返回没有指定默认值的参数长度。
(function (a, b, c = 5) {}).length // 2
作用域
参数如果有默认值,函数在声明和初始化的时候,参数会形成一个局部作用域,等初始化结束,这个作用域就会消失。
//参数y = x形成一个单独的作用域。
//这个作用域里面,变量x本身没有定义,所以指向外层的全局变量x。
//函数调用时,函数体内部的局部变量x影响不到默认值变量x。
let x = 1;
function f(y = x) {
let x = 2;
console.log(y);
}
f() // 1
rest参数
1.语法为...变量名
,实际上就是扩展运算符。
2.rest参数之后就不能再有其他参数了。
function add(a,...values) {
// a为2
// values获取剩余的参数 [5,3]
}
add(2, 5, 3)
3.函数的length属性,不包括 rest 参数。上面的函数,输出add.length结果为1。
4.arguments对象不是数组,而是一个类似数组的对象。而rest参数就是一个真正的数组。
严格模式
es6中不能在函数内部显式设定为严格模式。
// 报错
function doSomething(a, b = a) {
'use strict';
// code
}
name属性
1.获取函数的名字。
2.如果是一个命名函数赋值给一个变量,那么在es5中会返回空字符串,而 ES6 中会返回实际的函数名。
var f = function () {};
// ES5
f.name // ""
// ES6
f.name // "f"
3.如果是把一个有名字的函数赋值给变量,那么es5中和es6中返回的结果都是函数原本的名字。
const bar = function baz() {};
// ES5
bar.name // "baz"
// ES6
bar.name // "baz"
箭头函数
1.使用=>
定义箭头函数
var f = v => v;
//等同于
var f = function (v) {
return v;
};
2.如果只有没有参数或者有多个参数,就加一个()
。
//没有参数
var f = () => 5;
//多个参数
var sum = (num1, num2) => num1 + num2;
3.代码块如果多于一条语句,就使用{}
包裹
var sum = (num1, num2) =>{ num1 + num2;num1 - num2};
注意:由于大括号被解释为代码块,如果函数返回一个对象,记得包裹一个()
let getTempItem = id => ({ id: id, name: "Temp" });
4.如果箭头函数只有一行语句,且不需要返回值,可以采用下面的写法,就不用写大括号了。
//void 让函数不再return
let fn = () => void doesNotReturn();
箭头函数使用注意点
1.箭头函数没有自己的作用域,所以它里面的this指向的就是箭头函数定义时所在对象。
2.不可以当作构造函数,也就是说,不可以使用new命令。
3.不可以使用arguments对象,该对象在函数体内不存在。
4.不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
网友评论