JavaScript引擎如何读取和执行具有冲突全局和局部变量的函数
How do JavaScript engines read and execute functions with a conflicting global and local variable?
我需要了解浏览器中的JavaScript引擎是如何读取函数的。考虑以下代码:
var g = 5;
alert(g); //alerts 5
function haha() {
alert(g); // alerts NOTHING. Why is this? Why not alert 5? var g = 45 hasn't yet occurred
var g = 45;
alert(g); // alerts 45
};
haha();
alert(g); // alerts 5. Because g = 45 is a local variable.
Fiddle
您在haha
功能中看到的alert(g)
警告undefined
的效果来自可变吊装。
haha
功能实际执行为:
function haha() {
var g;
alert(g);
g = 45;
alert(g);
}
这是因为变量和函数定义在JavaScript中被提升到其作用域的顶部。
这种影响可能会导致一些相当不直观的行为,比如你所看到的。简单的解决方案是始终在执行任何代码之前声明变量和函数,以便编写的代码与正在执行的代码相匹配。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 正在全局范围中查找JavaScript函数
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 全局对象是属于哪个类的对象
- Javascript全局onclick监听器
- 从Javascript方法返回全局变量
- Javascript-ID冲突的几率
- 访问jsrender模板中的全局javascript变量并更新它
- javascript无法重新定义函数内部的全局对象
- javascript 中的全局函数
- 如何在javascript模块中包含jquery而不与全局名称空间冲突
- underscore.js,名为“”的全局对象;出口;和livefyre javascript API-集成冲突
- Javascript 全局变量命名冲突
- Jquery 与 Venobox 冲突并从全局范围之外调用函数
- 用冲突的局部变量重新定义全局变量
- JavaScript引擎如何读取和执行具有冲突全局和局部变量的函数
- JavaScript使对象一个全局窗口对象?(无冲突功能)
- 应该避免使用与全局变量冲突的变量