问题描述
我最近学习了 javascript 如何分两步执行代码:首先是编译,然后是解释步骤。
我了解到编译阶段只注册(考虑)整个代码中的变量(和函数名),而忽略分配给这些变量的内容。
一旦完成它的工作,解释器就会一行一行地执行分配值和执行编译器在前一阶段注册的函数的最终工作。
如果我错了,请纠正我。
有了这个理解,我有一个小问题。
考虑以下代码:
console.log(a);
a = 10; // not var a = 10;
编译阶段会忽略第 1 行,但也会忽略没有变量声明的第 2 行吗?相反,第 2 行直接写入未声明的变量 a
。由于这是对未声明变量的写操作,JS不会报错而是创建了一个新的全局变量a
。
现在,我的问题是编译和解释阶段将如何运行这段代码?在全局范围内创建这个变量 a
的是编译器还是解释器阶段?
如果编译器没有在第 2 行注册 var a
,解释器在尝试读取第 1 行未声明的变量 a
时是否应该给出错误?即使它确实在第 1 行创建了一个全局变量,解释器不应该打印 undefined
,因为编译器不能为它分配 10 吗?
简而言之,这个全局变量什么时候会被创建并赋值给它10?
希望我说得有道理。对不起我的英语不好。
提前致谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)