Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript异步功能_Javascript_Jquery - Fatal编程技术网

Javascript异步功能

Javascript异步功能,javascript,jquery,Javascript,Jquery,我已经看到了很多异步javascript的函数示例,包括setTimeout、AJAX调用等 显然,这些都有一定的延迟,这意味着脚本的流程会受到影响。但我想知道,如果我有这样的东西怎么办: function init() { this.initSlider(); this.testLog(); } function initSlider() { // find multiple items and build up a slider instance // f

我已经看到了很多异步javascript的函数示例,包括setTimeout、AJAX调用等

显然,这些都有一定的延迟,这意味着脚本的流程会受到影响。但我想知道,如果我有这样的东西怎么办:

function init() {
    this.initSlider();
    this.testLog();
}

function initSlider() {
    // find multiple items and build up a slider instance 
    // for each of these elements.
}

function testLog() {
    console.log('test);
}
如果initSlider可能需要很长时间,它会首先运行我的testLog函数吗


我目前对此有点不确定。我知道javascript流上可能有很多例子,但我找不到一个简单函数运行时间更长的例子。

这完全取决于initSlider()中的内容。虽然initslider()是一个重函数,不包含任何异步语句 那么testLog()将不会首先执行

Javascript将所有语句存储在callstack中,它们将一个接一个地执行

如果存在asynchronus语句,那么它会将该语句从调用堆栈中删除,并且有可能执行testLog()


所以对于你的问题,我的答案将取决于initSlider()中的代码。

Javascript是一种运行单线程的技术。当您使用异步方法(如AJAX或setTimeout)时,javascript引擎会逐个处理这些部分(如果一个人正在等待某件事情,而不是切换到另一个然后返回等等)。您可以通过Node.js看到javascript在异步任务上的强大功能。我想这篇博客很好地理解了Javascript和异步方法:

这看起来不是异步的,在我看来是同步的。这本书非常详细地解释了异步的工作原理和应该如何处理:。但是,您的代码段不公开任何异步内容。我们需要更多的细节。什么阻碍了你进行测试?:)一般来说,javascript中的函数不会占用太多时间,因此第二个函数调用不会“等待”,但当然只能在第一个函数“完成”后运行,不管ajax调用如何。@user2521387您的意思是我一直错误地将ajax用于JSON/SignalR/WebApi/REST服务,并且它只用于Javascript到PHP???@Stephan-v它不会“跳过”任何函数。setTimeout说“稍后运行此代码”,ajax调用说“在服务器完成后调用此代码并运行“complete”(etc)代码。那么,什么确切地表示异步语句呢?我认为AJAX和setTimeout就是这样的例子,但是有列表吗?还是我在这里想错了?你的问题是正确的。Asynchronous指的是没有在客户端本地运行的调用。假设您想调用一个ajax调用来登录facebook。所以你没有。你已经问过facebook了,你不确定fb什么时候会给你,所以js让它异步,这样在处理过程中你就可以做其他事情了。没有在客户端运行的任何东西都是异步的。setTimeout强制异步以实现某些目标