声明两个具有相同名称的变量

Tuk*_*nov 5 javascript variables jquery

是否可以调用在函数外部设置的相同名称变量?

var a = $(window).width(); // I want to call this variable
if(!$.isFunction(p)){
    var a = $(window).height(); // Not this one
    alert(a);
}
Run Code Online (Sandbox Code Playgroud)

小提琴

The*_*P4C 5

在这种情况下,您实际上已重新定义了值a.绝对没有办法引用具有相同名称的不同变量,因为它只是作为重新定义.


小智 5

如果你想声明一个全局变量,你可以这样做

window.varname="This is a global variable";
Run Code Online (Sandbox Code Playgroud)

你可以访问相同的

alert(window.varname);
Run Code Online (Sandbox Code Playgroud)

现在,您还可以在具有相同名称的函数内部使用局部变量

var varname="This is a local variable";
Run Code Online (Sandbox Code Playgroud)

你可以正常访问它.

这是您的代码,以便您可以访问全局变量而不是本地变量.

var p = ['foo',''];
window.a = $(window).width();
if(!$.isFunction(p)){
    var a = $(window).height();
    alert(window.a);
}
Run Code Online (Sandbox Code Playgroud)


The*_*P4C 4

a在像您这样的代码片段中,正在重新定义变量。这是因为if语句不会为变量创建另一个作用域。然而,函数却可以。

在这样的情况下:

var a = 0; // global
function doStuff() {
    var a = 10; // local
    alert(a);
    alert(window.a)
}
alert(a);
doStuff();
alert(a);
Run Code Online (Sandbox Code Playgroud)

在函数内部doStuff,变量a被重新定义。因此,此剪断将提醒数字0, 10, 0, 0。这证明全局变量没有在函数内部重新定义,因为a调用后的打印doStuff不会更改a全局范围内的值。

可以访问函数外部的变量a,因为任何未在非全局范围中声明的变量都放置在对象内部window。但是,如果使用此代码片段(调用匿名函数,创建新作用域):

var a = 0; // global
function doStuff() {
    var a = 10; // local
    alert(a);
    alert(window.a)
    function() {
        var a = 20; // even more local
        alert(a);
        alert(window.a);
    }();
}
alert(a);
doStuff();
alert(a);
Run Code Online (Sandbox Code Playgroud)

a您无法访问函数内部的值doStuff。您仍然可以使用访问全局变量window.a

但是,在您的情况下,该if语句不会创建新范围,因此您将变量重新定义a为新 value $(window).height()