Javascript 将三元运算符转换为传统if语句时未定义的变量

Javascript 将三元运算符转换为传统if语句时未定义的变量,javascript,variables,backbone.js,eslint,ternary,Javascript,Variables,Backbone.js,Eslint,Ternary,我正在使用eslint修复主干应用程序中的一些编码标准。我在视图中具有以下功能(简化代码): 我需要把三元运算符转换成一个标准的if语句。所以我试了一下: getData: function(foo){ var self = this; $.when(foo).then(function(){ var doUpdate = false; self.makeAjaxRequest().done(function(data){ self.tri

我正在使用eslint修复主干应用程序中的一些编码标准。我在视图中具有以下功能(简化代码):

我需要把三元运算符转换成一个标准的if语句。所以我试了一下:

getData: function(foo){
   var self = this;
   $.when(foo).then(function(){
      var doUpdate = false;

      self.makeAjaxRequest().done(function(data){
         self.trigger(function(){
            if(doUpdate === false) {
               return "foo";
            }

            return "bar";
         });
      });
   }
}

不幸的是,它似乎会导致代码中出现问题。我想知道我引用的doUpdate是否正确。在这个转换过程中我哪里出错了?

在原始代码中,
触发器
被调用,其值为
“foo”
“bar”

在更新的代码中,
trigger
通过函数调用

self.trigger((function(){
    if(doUpdate === false) {
        return "foo";
    }

    return "bar";
}()));
您从未调用替换条件的函数

我会保留条件版本,但如果您想使用替代方案,请调用您的函数:

getData: function(foo){
   var self = this;
   $.when(foo).then(function(){
      var doUpdate = false;

      self.makeAjaxRequest().done(function(data){
         self.trigger(function(){
            if(doUpdate === false) {
               return "foo";
            }

            return "bar";
         }());
//        ^^--------------- Note
      });
   }
}
但是,如果需要删除条件,我不会这样做。相反:

getData: function(foo){
   var self = this;
   $.when(foo).then(function(){
      var doUpdate = false;

      self.makeAjaxRequest().done(function(data){
         var triggerWith;
         if (doUpdate === false) {
            triggerWith = "foo";
         } else {
            triggerWith = "bar";
         }
         self.trigger(triggerWith);
      });
   }
}


旁注:除非您确实需要特别检查
false
,而不是其他各种falsy值(在该代码中似乎不是这样),否则只需
if(!doUpdate)
而不是
if(doUpdate==false)
是通常的方法。

在原始代码中,
触发器
使用值
调用“foo”
调用“bar”

在更新的代码中,
trigger
通过函数调用

self.trigger((function(){
    if(doUpdate === false) {
        return "foo";
    }

    return "bar";
}()));
您从未调用替换条件的函数

我会保留条件版本,但如果您想使用替代方案,请调用您的函数:

getData: function(foo){
   var self = this;
   $.when(foo).then(function(){
      var doUpdate = false;

      self.makeAjaxRequest().done(function(data){
         self.trigger(function(){
            if(doUpdate === false) {
               return "foo";
            }

            return "bar";
         }());
//        ^^--------------- Note
      });
   }
}
但是,如果需要删除条件,我不会这样做。相反:

getData: function(foo){
   var self = this;
   $.when(foo).then(function(){
      var doUpdate = false;

      self.makeAjaxRequest().done(function(data){
         var triggerWith;
         if (doUpdate === false) {
            triggerWith = "foo";
         } else {
            triggerWith = "bar";
         }
         self.trigger(triggerWith);
      });
   }
}


旁注:除非您确实需要专门检查
false
而不是其他各种falsy值(在该代码中似乎不是这样),否则只需
if(!doUpdate)
而不是
if(doUpdate==false)
是常用的方法。

为什么不在调用
self.trigger
之前直接使用if子句呢

self.makeAjaxRequest().done(function(data) {
    if (doUpdate) {
        self.trigger("bar");
    } else {
        self.trigger("foo");
    }
});

为什么不在调用
self.trigger
之前直接使用if子句呢

self.makeAjaxRequest().done(function(data) {
    if (doUpdate) {
        self.trigger("bar");
    } else {
        self.trigger("foo");
    }
});

我的脊梁有点生疏了,但恐怕不可能将`与函数一起用作参数。但是,您可以将其转换为iife(或使其成为命名函数)

或作为命名函数

function getUpdateEventName(doUpdate) {
    if(doUpdate === false) {
        return "foo";
    }

    return "bar";
}

self.trigger(getUpdateEventName(doUpdate));

我的脊梁有点生疏了,但恐怕不可能将`与函数一起用作参数。但是,您可以将其转换为iife(或使其成为命名函数)

或作为命名函数

function getUpdateEventName(doUpdate) {
    if(doUpdate === false) {
        return "foo";
    }

    return "bar";
}

self.trigger(getUpdateEventName(doUpdate));

您对self.trigger的参数是一个函数。。。您需要在函数的关闭后添加
()
。self.trigger的参数是一个函数。。。您需要在函数的}结束后添加
()
,我在本例中使用了Nina Scholz的答案。然而,这是一个正确的答案,它解决了我遇到的其他问题。在本例中,我最终使用了Nina Scholz的答案。然而,这是一个正确的答案,解决了我遇到的其他问题