我真的在网上搜索过这个问题。我只想在之前调用的函数结束时运行代码。让我解释一下这个例子:
var id=0;
function refreshID(){
//refresh the div
}
function postID(){
//some code
refreshID();
id=1;
}
通过调用函数postID,将执行函数refreshID,然后将变量id设置为1.但我认为在完全执行函数refreshID()之前将变量设置为1。所以我的问题是:如何运行代码(在这种情况下更改变量的值),当另一个函数结束时,它完全执行。
问候
答案 0 :(得分:0)
JavaScript不提供对变量的并发访问,在将id设置为1之前,refreshID将完全执行。
答案 1 :(得分:0)
您可以使用回调:
function refreshID(doWhateverElse){
//refresh the div
doWhateverElse();
}
function postID(){
//some code
refreshID(function() {
id=1;
} );
}
作为参数传递给refreshID
的函数只有在div刷新后才会运行。
答案 2 :(得分:0)
JavaScript是单线程的,因此保证代码可以线性运行 - 它永远不会跳过代码行。
在您的示例中,id = 1
在refreshID
返回后总是执行。令事情变得棘手的是refreshID
可以设置要异步完成的事情,例如使用setTimeout
,在这种情况下refreshID
将在回调运行之前返回。在这种情况下,将回调传递给函数或使用promises可能很有用。
例如:
var id = 0;
function refreshID(cb) {
setTimeout(function () {
// your work
// ...
cb();
});
}
function postID(){
// some code
refreshID(function () { id = 1; });
}
答案 3 :(得分:0)
不,在调用refreshID之前,不会为id分配1。它由javascript引擎本身确保。正如在其他答案中所说,它是单线程的,只有一行执行。但是,不需要任何其他网络/超时/间隔/ ...的ajax来解释为什么你认为你的代码执行有问题。如果函数refreshID对html进行了任何类型的更改,请记住,在脚本执行结束之前,这些更改将不可见。