Comments
登录后评论
Sign In
·

甚至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会在执行前被读取