繁体   English   中英

JavaScript函数中的if语句不起作用

[英]If statement within JavaScript function not working

我有以下功能

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语句时,它可以正常工作。

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

你的

var VisibilityNewDevice = 0;

该函数的末尾应该是

VisibilityNewDevice = 0;

它不起作用,因为您调用了var VisibilityNewDevice = 0; 特别是var 这意味着if语句中的VisibilityNewDevice没有引用您的外部变量,它引用了内部变量,该变量在执行时undefined

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

有了

var VisibilityNewDevice;

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

var VisibilityNewDevice = 0;

您正在将该局部变量设置为零。 不是您需要的外层。

答案是简单地删除函数内部的var

你写

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

JavaScript编译

var VisibilityNewDevice = 1
function visibilityNewDevice() {
    var VisibilityNewDevice = undefined;

    // undefined === 1
    if (VisibilityNewDevice === 1) {
     ... 
     VisibilityNewDevice = 0;
   }
}

注意到你的var在顶部悬挂 ,这也同样适用于var你里面创建function 当程序进入function时,该提升的 var将覆盖具有相同名称的所有全局var

另请参阅: JavaScript吊装说明

最后,当您创建私有var时, 提升自己的身份并不是一个坏主意,因此您可以更好地遵循代码

function () {
    var a, b, c, d;
}

这就是所谓的变量提升。

var x = 1;

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

test();

这和

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM