函数结束时如何运行代码
How to run code when function is over?
我真的在互联网上搜索了很长时间来寻找这个问题。我只想在之前调用的函数结束时运行代码。让我解释一下这个例子:
var id=0;
function refreshID(){
//refresh the div
}
function postID(){
//some code
refreshID();
id=1;
}
通过调用函数 postID,将执行函数刷新 ID,然后将变量 id 设置为 1。但我认为在函数 refreshID() 完全执行之前,变量设置为 1。所以我的问题是:当另一个函数结束时,当它完全执行时,如何运行代码(在这种情况下更改变量的值)。
问候
JavaScript 不提供对变量的并发访问,刷新ID将在您将id设置为1之前完全执行。
您可以使用回调:
function refreshID(doWhateverElse){
//refresh the div
doWhateverElse();
}
function postID(){
//some code
refreshID(function() {
id=1;
} );
}
作为参数传递给 refreshID
的函数仅在刷新div 后运行。
JavaScript 是单线程的,所以代码保证是线性运行的——它永远不会跳过代码行。
在您的示例中,id = 1
始终在返回refreshID
后执行。更棘手的是,refreshID
可能会将事情设置为异步完成,例如使用 setTimeout
,在这种情况下,refreshID
将在运行回调之前返回。在这种情况下,将回调传递给函数或使用 promise 可能很有用。
例如:
var id = 0;
function refreshID(cb) {
setTimeout(function () {
// your work
// ...
cb();
});
}
function postID(){
// some code
refreshID(function () { id = 1; });
}
否,在对刷新 ID 的调用完成之前,不会为 id 分配 1。它是由JavaScript引擎本身来保证的。正如其他答案中所述,它是单线程的,只有一行执行。但是不需要任何其他网络的ajax/超时/间隔/...解释为什么你会认为你在代码执行中存在问题。如果函数刷新 ID 对 html 进行任何类型的更改,请记住,在脚本执行结束之前,这些更改将不可见。
相关文章:
- AJAX调用运行C代码的最佳实践
- 在经过一段时间或满足条件后运行代码
- 在Firefox restartless插件中,当一个新窗口打开时,我如何运行代码(监听窗口打开)
- 如果调试器关闭,Internet Explorer将出现运行代码问题
- JQuery 帖子未在 PHP 文件中运行代码
- 当ajax请求发生时运行代码的Chrome扩展
- 当我运行代码时,我得到以下结果 []对象对象] [对象对象],但应该给我一个有序数组
- 仅当客户端连接到Meteor服务器时才运行代码
- 在.each()循环中的ajax完成后,Jquery运行代码
- node.js和Cygein,我该如何运行代码
- 未访问全局变量,未运行代码
- Meteor - 在客户端上的异步回调的 for 循环后运行代码
- 运行代码以在Android应用程序中单击javascript按钮?尝试在页面上抓取回复按钮联系信息 craigslist
- 函数结束时如何运行代码
- JS 在不满足条件时在 if 语句中运行代码段
- 在 Ember 视图参数更改上运行代码
- 如何在 YUI 模块中运行代码
- 如何在未在 iframe 中定义的 iFrame 中运行代码
- 在后台运行代码,同时显示警报
- 加载页面时运行代码