在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块中返回函数之前运行