参数默认值

函数参数是从左到右解析,如果没有默认值会被解析成 undefined

  1. function test(x, y = "world") {
  2. console.log("默认值", x, y);
  3. // 默认值 hello world
  4. // 默认值 hello wuchendi
  5. }
  6. test("hello");
  7. test("hello", "wuchendi");

参数默认赋值具体的数值

  1. let x = "test";
  2. // function test2(x, y = x) {
  3. // console.log("作用域", x, y);
  4. // }
  5. function test2(c, y = x) {
  6. console.log("作用域", x, y); // 作用域 test test
  7. }
  8. // test2();
  9. test2("kill");

Rest 参数

  1. function test3(...arg) {
  2. for (let v of arg) {
  3. console.log("rest", v);
  4. // rest 1
  5. // rest 2
  6. // rest 3
  7. // rest 4
  8. // rest a
  9. }
  10. }
  11. test3(1, 2, 3, 4, "a");

扩展运算符

  1. console.log(...[1, 2, 4]); // 1 2 4
  2. console.log("a", ...[1, 2, 4]); // a 1 2 4

箭头函数

  1. let arrow = (v) => v * 2;
  2. console.log("arrow", arrow(3)); // arrow 6
  3. let arrow2 = () => 5;
  4. console.log("arrow2", arrow2()); // arrow 5

扩展

  1. function tail(x) {
  2. console.log("tail", x); // tail 123
  3. }
  4. function fx(x) {
  5. return tail(x);
  6. }
  7. fx(123);

箭头函数和普通函数的区别

  1. 箭头函数和普通函数的样式不同,箭头函数语法更加简洁、清晰,箭头函数是=>定义函数,普通函数是function定义函数。
  2. 箭头函数会捕获其所在上下文的 this 值,作为自己的 this 值,定义的时候就确定并固定了。
  3. 箭头函数不能作为构造函数使用,也不能使用new关键字(因为箭头函数没有自己的this,它的this其实是继承了外层执行环境中的this,且this指向永远不会改变,作为构造函数其的this要是指向创建的新对象)。
  4. 箭头函数没有自己的arguments。在箭头函数中访问arguments实际上获得的是外层局部(函数)执行环境中的值。
  5. call、apply、bind 并不会影响其 this 的指向。
  6. 箭头函数没有原型prototype。
  7. 箭头函数不能当作 Generator 函数,不能使用 yield 关键字。