# 不知道的事

# 赋值表达式会返回该值

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变量?

  1. 并不是闭包
  2. 看上去好像是在执行时临时去获取并放到自己的Local作用域中(问题是,函数执行时父级作用域已经不存在了,this又从哪里来?还是说使用了类似闭包的机制在创建函数时保存了父级作用域?)

# 闭包的内存模型

原文 (opens new window)

# 什么是纯函数

如果一个函数,相同的输入总是获得相同的输出,则该函数为纯函数

纯函数的几个条件:

  1. 不能改变入参
  2. 不能有网络请求、IO等操作
  3. 不能有Math.random(),Date.now()等操作
上次更新: 2/13/2025, 3:29:47 AM