20200404
Plan
- 你不知道的 js 下卷 第二章语法
Notes
2.8 箭头函数
- 不存在箭头函数声明,是匿名函数的表达式 -- 没有用于递归或者事件绑定/解绑的命名引用
递归
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);
测试之后发现这两个例子均可以正常运行,现在还不太理解"命名引用"?
- 解决匿名函数的 this 问题,this 在匿名函数中是词法绑定的
let obj1 = {
fn1: () => {
console.log(this); // obj1 or window?
}
};
obj1.fn1();
上面的例子,this 指向全局。这里的 this 不会根据是谁调用的 fn1 来确定 this,this 早就被固定了。
- 箭头函数没有自己的 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 循环
迭代器上的循环
- for...in 在键值上循环,for...of 在值上循环
一些内置的 iterable 对象:
- Arrays
- Strings
- Generator
- Collections/TypedArrays
- 可以通过 return, break, continue 提前终止