Javascript 将三元运算符转换为传统if语句时未定义的变量
我正在使用eslint修复主干应用程序中的一些编码标准。我在视图中具有以下功能(简化代码): 我需要把三元运算符转换成一个标准的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
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的答案。然而,这是一个正确的答案,解决了我遇到的其他问题