如果JavaScript函数中的语句不起作用

时间:2015-07-17 21:50:25

标签: javascript if-statement

我有以下功能

var VisibilityNewDevice = 1
function visibilityNewDevice() {
    if (VisibilityNewDevice === 1) {
         toggleVisibility('buttonPressesTable'),
         toggleVisibility('IconMinimize'),
         toggleVisibility('IconSync'); 
         var VisibilityNewDevice = 0;
    }
}

如果我调用visibilityNewDevice(),我会返回undefined并且不会运行代码。但是,如果我像这样运行

if (VisibilityNewDevice === 1) {
    toggleVisibility('buttonPressesTable'),
    toggleVisibility('IconMinimize'), 
    toggleVisibility('IconSync'); 
    var VisibilityNewDevice = 0;
}

工作正常。我很困惑为什么function不起作用,但是当我运行if语句时,它运行正常。

5 个答案:

答案 0 :(得分:2)

您的函数会尝试再次定义变量。

你的

var VisibilityNewDevice = 0;

在函数的末尾应该是

VisibilityNewDevice = 0;

答案 1 :(得分:1)

它无效,因为您正在呼叫var VisibilityNewDevice = 0;。特别是var。这意味着if语句中的VisibilityNewDevice没有引用您的外部变量,它引用内部变量,在执行时为undefined

删除if语句中的var应该可以正常工作

答案 2 :(得分:1)

通过

var VisibilityNewDevice;

您已在函数内声明了局部变量VisibilityNewDevice。通过

var VisibilityNewDevice = 0;

您将本地变量设置为零。不需要外面的那个。

答案 3 :(得分:1)

  

答案是删除函数

中的muq_external

你写

var

Javascript编译

var VisibilityNewDevice = 1
function visibilityNewDevice() {
  // expecting: 1 === 1
  if (VisibilityNewDevice === 1) {
     ...
     var VisibilityNewDevice = 0;
  }
}

请注意,您的var VisibilityNewDevice = 1 function visibilityNewDevice() { var VisibilityNewDevice = undefined; // undefined === 1 if (VisibilityNewDevice === 1) { ... VisibilityNewDevice = 0; } } 悬挂位于顶部,适用于您在var内创建的任何var。当程序进入function时,悬挂 var将覆盖具有相同名称的任何全局var

另请参阅:JavaScript Hoisting Explained

最后,当您创建私有function时,提升并不是一个坏主意,这样您可以更好地遵循您的代码

var

答案 4 :(得分:0)

这是呼叫变量提升。

var x = 1;

function test(){
   console.log(x);
   var x = 3;
}

test();

这与

相同
function test(){
       var x;
       console.log(x);
       x = 3;
    }