20200404

@xiaojingzhao

Plan

  • 你不知道的 js 下卷 第二章语法

Notes

2.8 箭头函数

  1. 不存在箭头函数声明,是匿名函数的表达式 -- 没有用于递归或者事件绑定/解绑的命名引用

递归

const fibonacci = n => {
  if (n === 1) {
    return 1;
  }
  if (n === 2) {
    return 1;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // 可以递归? 不明白这里的不能用于递归的命名引用问题?
};

事件绑定/解绑

let clickFn = () => console.log("body clicked");
document.body.addEventListener("click", clickFn);
document.body.removeEventListener("click", clickFn);

测试之后发现这两个例子均可以正常运行,现在还不太理解"命名引用"?

  1. 解决匿名函数的 this 问题,this 在匿名函数中是词法绑定的
let obj1 = {
  fn1: () => {
    console.log(this); // obj1 or window?
  }
};
obj1.fn1();

上面的例子,this 指向全局。这里的 this 不会根据是谁调用的 fn1 来确定 this,this 早就被固定了。

  1. 箭头函数没有自己的 arguments,这个 arguments 继承自父层。
function foo() {
  return () => console.log(arguments);
}
a = foo(1, 2, 3);
a(4, 5, 6); // Argements[1,2,3, length: 3]

2.9 for...of 循环

迭代器上的循环

  1. for...in 在键值上循环,for...of 在值上循环

一些内置的 iterable 对象:

  • Arrays
  • Strings
  • Generator
  • Collections/TypedArrays
  1. 可以通过 return, break, continue 提前终止

More