Javascript—使局部变量的行为类似于全局变量

Javascript—使局部变量的行为类似于全局变量,javascript,error-handling,global-variables,local-variables,Javascript,Error Handling,Global Variables,Local Variables,我正在学习局部变量和全局变量。在这个程序中,我的函数做两件事。如果在函数中输入一个大于0的数字,它将设置Y变量。如果传递0,它将显示Y变量 函数sety(x){ 如果(x>0)y=x;否则警报(y); } 将Y设置为222 将Y设置为333 显示Y变量创建闭包 (function() { var y; // y is now local to this closure window.sety = function(x) { // however you stil

我正在学习局部变量和全局变量。在这个程序中,我的函数做两件事。如果在函数中输入一个大于0的数字,它将设置Y变量。如果传递0,它将显示Y变量

函数sety(x){
如果(x>0)y=x;否则警报(y);
}
将Y设置为222
将Y设置为333
显示Y变量
创建闭包

(function() {
    var y; // y is now local to this closure
    window.sety = function(x) {
        // however you still want sety() to be a global function,
        // so you have to do this explicitly
        if( x > 0) y = x;
        else alert(y);
    };
})();

我会注意到,让一个函数做两件事通常是一个坏主意——尤其是像“set y”这样的名称。考虑将它分为两个函数:<代码> StY(x)< /C>和<代码> GETYY()/<代码>,后者返回值而不是警告它。

< P>可以向函数添加属性并更新它。

函数sety(x){
如果(x>0){
sety.y=x;
}否则{
警报(sety.y);
}
}
将Y设置为222
将Y设置为333

显示Y变量
如果您试图在没有设置的情况下显示变量,它会说Y是未定义的,这是因为行
Y=x
的行为类似于定义变量Y的
var Y=x
。如果该行在您尝试显示它之前没有执行过(如果您尝试先显示它,则不会执行),那么
var y
将永远不会发生,这会给您一个错误。要解决这个问题,必须先定义y,然后再定义else

下面的代码段将是一个“局部变量”。本质上,它只是在每次执行函数时重新定义y

函数sety(x){
变量y;
如果(x>0)y=x;
其他警报(y);
}
将Y设置为222
将Y设置为333

显示Y变量
您可以按如下方式访问该变量:
window.Y
,因为您在执行此操作时隐式设置了
窗口
对象

这是为了克服未定义变量的问题

函数sety(x){
如果(x>0)y=x;
else警报(window.y);
}
将Y设置为222
将Y设置为333

显示Y变量
对于第二个问题,必须先定义一个变量,然后才能尝试使用它
y
直到第一次
y=x
调用才定义,如果先单击“获取”按钮,则不会发生这种情况。在本例中,Y是一个全局变量。如果我想创建一个不包含全局变量的程序呢variables@MaheerAli是的,但这是克服OP面临的未定义变量问题的一种方法。