甚至webstorm也被骗了(?
var 会变量提升吧?最好不要这么用🤣
看教程看到的这个,实在不是很理解,好逆天的设计(
(1)创建AO对象。AO即 Activation Object 活跃对象,其实就是「 执行期上下文」。
(2)找形参和变量声明,将形参名和变量作为 AO 的属性名,值为undefined。
(3)将实参值和形参统一,实参的值赋给形参。
(4)查找函数声明,函数名作为 AO 对象的属性名,值为整个函数体。
function a() {}是函数声明,在fn的作用域内会被优先读取,然后才执行代码,此时第一个console.log是打印函数 a 而不是传进来的变量 a,至于为什么fn(a)里的a没被标记未使用是因为js没有类型检查。不然这个会报错。
而var b = function() {}是函数表达式 本身是一个赋值语句,只有在顺序执行到var b的时候才会被调用。而作用域根的function会在执行前被读取