Javascript全局变量范围问题

前端之家收集整理的这篇文章主要介绍了Javascript全局变量范围问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到了 Javascript的一个奇怪的范围问题(见 JSFiddle):
var someGlobal = 3;

function someF() {
    // undefined issue
    alert(someGlobal);
    var someGlobal = 5;
    // Displays 5
    alert(someGlobal);
}

function someF2() {
    // Displays 3,why?
    alert(someGlobal);
}

someF();
someF2();

为什么Javascript在someF2()中抛出一个未定义的问题?为什么someF2()可以访问someGlobal,而someF()不能访问?如何确保函数中可以访问全局变量

备注:

在这两种情况下,函数都是通过调用alert(someglobal)来启动的,为什么一个函数抛出一个未定义的问题而另一个没有?

解决方法

someF创建一个名为someGlobal的新(本地作用域)变量(它掩盖全局someGlobal)并为其赋值.它没有触及全局someGlobal(虽然无法访问它,因为在范围内有另一个具有相同名称的变量).

var语句被提升,因此someGlobal被屏蔽了所有someF(不仅仅是在var语句之后).在为其分配值之前,本地someGlobal的值是未定义的.

someF2访问原始(未触动)全局someGlobal.

原文链接:https://www.f2er.com/js/150190.html

猜你在找的JavaScript相关文章