# 不知道的事
# 赋值表达式会返回该值
let i = 1
i = 2 // return 2
# 使用括号包裹避免对象和函数歧义
let func = (a, b) => ({a: a, b: b})
# 使用new Function创建函数
const sum = new Function('a,b', 'return a + b')
// const sum = new Function('a', 'b', 'return a + b')
// 等同:const sum = function(a, b) { return a + b }
来自一个问题:如何将代码字符串放到函数里?(来自vue的模板编译)发现自己不知道
MDN FunctionConstructor参考 (opens new window)
# 箭头函数的this绑定
function person() {
return () => {
console.log(this)
}
}
const p1 = person().call({name: 'zhangsan'})
p1() // {name: 'zhangsan'}
**箭头函数中的this是定义时绑定,而非执行时绑定。**换句话说,箭头函数中this一旦定义好了,就无法在执行过程中改变。
一直有一个说法是箭头函数自己没有this,是执行的时候向父级作用域找的。
我认为这个说法不准确,箭头函数是有this的,不过不允许执行时绑定而已。
如果箭头函数真的没有this,那么该如何保存定义时获取的this值呢?
通常可以用闭包的方式,但是箭头函数并不是通过闭包的形式获取this的值,仍然是在自己的Local作用域中调用的,因而可以判定箭头函数在创建时绑定了this的值。
3月1日
箭头函数在自己的”活动对象“(局部作用域)中的确没有”this“变量。所以问题就是,箭头函数在什么时候获取和存储了this变量?
- 并不是闭包
- 看上去好像是在执行时临时去获取并放到自己的Local作用域中(问题是,函数执行时父级作用域已经不存在了,this又从哪里来?还是说使用了类似闭包的机制在创建函数时保存了父级作用域?)
# 闭包的内存模型
# 什么是纯函数
如果一个函数,相同的输入总是获得相同的输出,则该函数为纯函数
纯函数的几个条件:
- 不能改变入参
- 不能有网络请求、IO等操作
- 不能有Math.random(),Date.now()等操作
← bind的实现原理 为什么DOM操作耗性能 →