function outer() {
$(['hi', 'there']).each(function(idx, e) {
console.log(e);
return;
});
alert("I don't want to be called");
}
function outer() {
$.get('http://test.com', function (data) {
console.log(data)
return; // I want to terminate the entire outer() function here.
});
alert("I don't want to be called");
}
在这种情况下突破嵌套函数的惯例是什么?使用for
循环时,返回它们会终止包含它们的整个函数。但是,由于$.each()
是一个单独的函数调用,因此从它返回只会结束自身,而不是外部函数。我可以简单地return
两次,一次在内部,一次在外面,但是我不确定如何处理$.ajax()
,因为只有在我获得成功的响应时才需要终止该功能。
答案 0 :(得分:1)
对于$.each()
,您可以在回调中使用return false;
停止迭代,如jQuery documentation中所述。
这不会从调用函数返回,但你可以设置一个标志并在外部函数中测试它。
如果你想要一个简单的方法从循环内部返回外部函数,你可以通过一个简单的for
循环获得更好的效果:
var array = [ 'hi', 'there' ];
for( var i = 0; i < array.length; ++i ) {
var e = array[i];
console.log(e);
return;
}
alert("I don't want to be called");
对于$.get()
,您应该对代码添加一些console.log()
次调用,并观察它们的调用顺序:
function outer() {
console.log( 'in outer before $.get is called' );
$.get('http://test.com', function (data) {
console.log( 'inside $.get callback' );
});
console.log( 'in outer after $.get returns' );
}
现在您将注意到的是日志消息的顺序:
in outer before $.get is called
in outer after $.get returns
inside $.get callback
看看回调是怎么回事? outer
函数完成后,它被称为。因此,此回调无法阻止outer
的其余部分执行。
所以你需要更多地思考你需要做什么,并想出一个不同的方法来实现它。
答案 1 :(得分:1)
以下是一切如何运作的摘要。
<强>。每个()强>
return true; // skips to the next iteration of .each()
return false; // exits the .each() loop
简而言之,在单个陈述中无法打破包含.each()
的函数。
<强> $。得到()强>
return [true|false]; // makes no sense at all.
由于$.get()
中的返回在ajax调用完成之前没有执行,因此它不会起到太多作用。即使你进行同步ajax调用,成功回调中的return语句仍然没有做任何实质性的事情。 将函数的返回视为要分配给调用语句的值。
什么使你有必要打破你的职能?
答案 2 :(得分:0)
如果使用$ .ajax()而不是短手$ .get(),则可以指定它是同步执行的。
$.ajax({
url: 'http://test.com',
success: function (data) {
},
async: false
});
通常,当您想根据函数的返回值做出决定时,它会返回一个值,然后使用条件语句来确定接下来会发生什么。