- 函數參數的默認值
function log(x, y = 'World') {
console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello
//如果參數的默認值是變量,那么每次都會重新計算默認值表達式
let x = 99;
function foo(p = x + 1) {
console.log(p);
}
foo() //100
x=100
foo() //101
- 與解構賦值配合使用
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
- rest參數
//rest參數必須放在最后
function add(a,...values) {
let sum = a;
for (var val of values) {
sum += val;
}
return sum;
}
add(2, 5, 3) // 10
- 箭頭函數
var f = () => 5;
// 等同于
var f = function () { return 5 };
- 使用箭頭函數的注意點
- 函數體內的this對象,是定義生效時所在的對象,而不是使用時所在的對象
- 不可以當做構造函數
- 不可以使用arguments對象,可以使用rest代替
- 不可以使用yield命令
function foo() {
return () => {
return () => {
return () => {
console.log('id:', this.id);
};
};
};
}
//在此時定義生效,this則指向所在對象
var f = foo.call({id: 1});
var t1 = f.call({id: 2})()(); // id: 1
var t2 = f().call({id: 3})(); // id: 1
var t3 = f()().call({id: 4}); // id: 1