为什么javascript将函数内(局部)变量视为全局(窗口)变量?

为什么javascript将函数内(局部)变量视为全局(窗口)变量?,javascript,jquery,Javascript,Jquery,我有一个javascript文件,其中包含函数内(本地)变量。例如,在下面的代码中有变量:国家、arr、印度、美国、阿联酋、澳大利亚、加拿大、科威特等。当我启动我的网站时,所有这些变量都可以通过window.xyz访问(例如window.countries、window.usa等)。我真的很困惑为什么会发生这种事。如果有人能帮我理解这一点,我将不胜感激 MyApp.Helpers.LocationEducationHelper = function() { function getPopula

我有一个javascript文件,其中包含函数内(本地)变量。例如,在下面的代码中有变量:国家、arr、印度、美国、阿联酋、澳大利亚、加拿大、科威特等。当我启动我的网站时,所有这些变量都可以通过window.xyz访问(例如window.countries、window.usa等)。我真的很困惑为什么会发生这种事。如果有人能帮我理解这一点,我将不胜感激

MyApp.Helpers.LocationEducationHelper = function() {

function getPopularCountriesArray(){
    // var me = this;
    arr = [];
    countries = MyApp.getAllCountries();
    india = countries.get("IN");
    usa = countries.get("US");
    uae = countries.get("AE");
    australia = countries.get("AU");
    canada = countries.get("CA");
    kuwait = countries.get("KW");
    nz = countries.get("NZ");
    pk = countries.get("PK");
    russia = countries.get("RU");
    saudiArabia = countries.get("SA");
    southAfrica = countries.get("ZA")
    gb = countries.get("GB");
    arr.push(india, usa, gb, uae, canada, australia, nz, pk, kuwait, russia, saudiArabia, southAfrica);
    return arr
};
return {
    getPopularCountriesArray : getPopularCountriesArray
};};
添加变量 在每个变量之前。 如果没有它,它将被视为全局变量 在每个变量之前。
如果没有它,它将被视为全局的

您可以这样重写它

MyApp.Helpers.LocationEducationHelper=function(){
函数getPopularCountriesArray(){
//var me=这个;
var arr=[],
countries=MyApp.getAllCountries(),
印度=国家。进入,
美国=国家。获取(“美国”),
阿联酋=国家。获取(“AE”),
澳大利亚=国家。获取(“AU”),
加拿大=国家。获取(“CA”),
科威特=国家。获取(“KW”),
nz=国家。获取(“nz”),
pk=国家。获取(“pk”),
俄罗斯=国家。获取(“RU”),
saudiArabia=国家。获取(“SA”),
南非=国家。获取(“ZA”),
gb=国家。获取(“gb”);
arr.push(印度、美国、英国、阿联酋、加拿大、澳大利亚、新西兰、pk、科威特、俄罗斯、沙特、南非);
返回arr
};
返回{
getPopularCountriesArray:getPopularCountriesArray

};};您可以这样重写它

MyApp.Helpers.LocationEducationHelper=function(){
函数getPopularCountriesArray(){
//var me=这个;
var arr=[],
countries=MyApp.getAllCountries(),
印度=国家。进入,
美国=国家。获取(“美国”),
阿联酋=国家。获取(“AE”),
澳大利亚=国家。获取(“AU”),
加拿大=国家。获取(“CA”),
科威特=国家。获取(“KW”),
nz=国家。获取(“nz”),
pk=国家。获取(“pk”),
俄罗斯=国家。获取(“RU”),
saudiArabia=国家。获取(“SA”),
南非=国家。获取(“ZA”),
gb=国家。获取(“gb”);
arr.push(印度、美国、英国、阿联酋、加拿大、澳大利亚、新西兰、pk、科威特、俄罗斯、沙特、南非);
返回arr
};
返回{
getPopularCountriesArray:getPopularCountriesArray

};};在函数内部局部声明的变量,没有将“var”视为全局变量。如果要限制范围,请使用“var”

全球宣言

var x = 4; //global variable
(function(){
    console.log(x); //returns 4
})();
console.log(x); //returns 4
地方申报

(function(){
    var y = 4; //local variable
    console.log(y); //returns 4
})();
console.log(y); // Reference error y is not defined
局部无风险

(function(){
    z = 4; //global variable
    console.log(z); //returns 4
})();
console.log(z); // returns 4

在函数内部局部声明的变量,没有将“var”视为全局变量。如果要限制范围,请使用“var”

全球宣言

var x = 4; //global variable
(function(){
    console.log(x); //returns 4
})();
console.log(x); //returns 4
地方申报

(function(){
    var y = 4; //local variable
    console.log(y); //returns 4
})();
console.log(y); // Reference error y is not defined
局部无风险

(function(){
    z = 4; //global variable
    console.log(z); //returns 4
})();
console.log(z); // returns 4

您需要一个var语句<代码>var arr=[]
,…已修复它。我尝试使用var。但很明显,国家被设置为两个函数,所以var在我的第一次尝试中不起作用。但将var添加到这两个位置已经解决了这个问题。谢谢。你需要一份var声明<代码>var arr=[]
,…已修复它。我尝试使用var。但很明显,国家被设置为两个函数,所以var在我的第一次尝试中不起作用。但将var添加到这两个位置已经解决了这个问题。谢谢