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参数必须放在最后
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