在Javascript中,是否有一种技术可以在返回后执行代码?

在Javascript中,是否有一种技术可以在返回后执行代码?,javascript,Javascript,有没有一种技术可以让我在返回后执行代码? 我想返回一个值,然后在不引入临时变量的情况下重置该值 我目前的代码是: var foo = (function(){ var b; return { bar: function(a) { if(b){ var temp = b; b = false; return temp; }else{ b = a; r

有没有一种技术可以让我在返回后执行代码? 我想返回一个值,然后在不引入临时变量的情况下重置该值

我目前的代码是:

var foo = (function(){
  var b;

  return {
    bar: function(a) {
        if(b){
          var temp = b;
          b = false;
          return temp;
        }else{
          b = a;
          return false;
        };
    }
  };
})();

foo.bar(1);
我想避免使用
temp
var。这可能吗


var b
在函数调用之间保留一个值,因为它是一个记忆化样式的函数。

设置
b
什么并不重要,因为您在函数中使用
var
声明它。它不存在于函数之外。

我对这段代码一无所知。。。但在这里你可以这样做:

function(a) {
    var b;
    // I suppose b is defined here ?

    if(b)
    {
        b = false;
        return !b;
    } else {
        b = a;
        return false;
    };
};

我不认为我会使用这样的东西,但你可以为它编写一个函数:

var foobar = function(value, callback) {
  callback();
  return value;
};
然后在您的代码中使用如下内容:

function(a) {
  var b;

  if (b) {
    // The first argument is what you want returned.
    // The second argument is a function that you want executed "after" you've calculated the return value
    return foobar(b, function() {
      b = false;
    });
  } else {
    b = a;
    return false;
  };
};
我叫它
foobar
,因为我简直想不出这个概念的名字:)

显然,代码并不是在实际返回之后执行的(这是不可能的),但它确实在执行最终函数之前捕获了返回值的值,这会导致一些看起来像您所追求的东西


但是,再一次,我不确定我是否建议使用这样的东西:)

我认为这是不可能的(或者我不知道怎么做)。我将尝试创建一个可以执行任何操作(即重置变量)的函数,然后使用
return resetu variables()


函数“reset_variables”也会返回您想要的值。

您确实需要在此处显示完整的代码。在您的示例中,
b
始终是
未定义的
,因此条件将始终进入
else案例
,其次,由于我们在Javascript中获得了词法函数作用域,
b
在函数结束时将始终丢失其值

我猜你是在利用闭包来保存对该变量的引用。但是,在没有看到实际代码的情况下回答是不可能的

在Javascript中,是否有一种技术可以在返回后执行代码

当然。它被称为
setTimeout()
,但不知何故,我怀疑它是否适合您

无论如何,这是:

var foo = (function(){
  var b;

  return {
    bar: function(a) {
        if(b){
          setTimeout(function() {b = false;},20);
          return b;
        }else{
          b = a;
          return false;
        };
    }
  };
})();

foo.bar(1);
作为第一个参数传递给
setTimeout
的函数将“关闭”
b
变量,并在20毫秒后进行设置

如果您想保留代码执行的同步流,那么绝对不行,除非您通过与所需值一起返回的函数手动执行

最终,您的最佳选择将是
temp
变量。如果愿意,您可以像
b
变量一样关闭它:

var foo = (function(){
  var b,temp;

  return {
    bar: function(a) {
        if(b){
          temp = b;
          b = false;
          return temp;
        }else{
          b = a;
          return false;
        };
    }
  };
})();

foo.bar(1);

使用finally块确保某些代码在另一个块之后运行。该块可以包含错误、返回或其他内容。最后一个块将在后面运行

try {
    return 'something';
} finally {
    // your after return code
} 

temp在第一个条件下始终为true…“
var b
在函数调用之间保留一个值”-不,它没有。似乎没有人注意到上面的函数声明缺少其名称:)更新了示例代码以澄清问题@Šime Vidas:您假设匿名函数是一个声明。:)为什么是20毫秒而不是0?它仍然保证在函数返回后执行,即使您输入0。20似乎是任意的。这是一个出色、优雅的解决方案!谢谢你,因为这解决了我的问题,我认为这是一个非黑客解决方案。Bravo.MDN也同意try的非黑客性。。。最后
-和。。。最后没有运气:(在我用Firefox进行的测试中,
最后
似乎是在
try
setTimeout(function(){},0)中的
返回之前执行的)
在我的设置中似乎确实有效。您似乎不了解JavaScript调用堆栈。finally总是在函数返回给调用方之前执行。此答案不正确。此解决方案不适用于我,最终在try块中返回函数之前运行