参数默认值
函数参数是从左到右解析,如果没有默认值会被解析成 undefined
function test(x, y = "world") {
console.log("默认值", x, y);
// 默认值 hello world
// 默认值 hello wuchendi
}
test("hello");
test("hello", "wuchendi");
参数默认赋值具体的数值
let x = "test";
// function test2(x, y = x) {
// console.log("作用域", x, y);
// }
function test2(c, y = x) {
console.log("作用域", x, y); // 作用域 test test
}
// test2();
test2("kill");
Rest 参数
function test3(...arg) {
for (let v of arg) {
console.log("rest", v);
// rest 1
// rest 2
// rest 3
// rest 4
// rest a
}
}
test3(1, 2, 3, 4, "a");
扩展运算符
console.log(...[1, 2, 4]); // 1 2 4
console.log("a", ...[1, 2, 4]); // a 1 2 4
箭头函数
let arrow = (v) => v * 2;
console.log("arrow", arrow(3)); // arrow 6
let arrow2 = () => 5;
console.log("arrow2", arrow2()); // arrow 5
扩展
function tail(x) {
console.log("tail", x); // tail 123
}
function fx(x) {
return tail(x);
}
fx(123);
箭头函数和普通函数的区别
- 箭头函数和普通函数的样式不同,箭头函数语法更加简洁、清晰,箭头函数是=>定义函数,普通函数是function定义函数。
- 箭头函数会捕获其所在上下文的 this 值,作为自己的 this 值,定义的时候就确定并固定了。
- 箭头函数不能作为构造函数使用,也不能使用new关键字(因为箭头函数没有自己的this,它的this其实是继承了外层执行环境中的this,且this指向永远不会改变,作为构造函数其的this要是指向创建的新对象)。
- 箭头函数没有自己的arguments。在箭头函数中访问arguments实际上获得的是外层局部(函数)执行环境中的值。
- call、apply、bind 并不会影响其 this 的指向。
- 箭头函数没有原型prototype。
- 箭头函数不能当作 Generator 函数,不能使用 yield 关键字。