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