JavaScript异步编程1.1.1 现在还是将来运行_JavaScript异步编程1.1.1 现在还是将来运行试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > JavaScript异步编程 > 1.1.1 现在还是将来运行

JavaScript异步编程——1.1.1 现在还是将来运行

在探究setTimeout之前,先来看一个简单的例子。该情形常常会迷惑JavaScript新手,特别是那些刚刚从Java和Ruby等多线程语言迁移过来的新手。 EventModel/loopWithTimeout.js for (var i = 1; i <= 3; i++) { setTimeout(function(){ console.log(i); }, 0); }; 4 4 4 大多数刚接触JavaScript语言的人都会认为以上循环会输出1,2,3,或者重复输出这3个数字,因为这里的3次延时都抢着要第一个触发(每次暂停都调度为0毫秒后到时)。 要理解为什么输出是4,4,4,需要知道以下3件事。 这里只有一个名为i的变量,其作用域由声明语句var i定义(该声明语句在不经意间让i的作用域不是循环内部,而是扩散至蕴含循环的那个最内侧函数)。 循环结束后,i===4一直递增,直到不再满足条件i<=3为止。 JavaScript事件处理器在线程空闲之前不会运行。 前两条还属于JavaScript 101的范畴,但第三个更像是一个“惊喜”。一开始使用JavaScript的时候,我也不太相信会这样。Java令我担心自己的代码随时会被中断。上百万种潜在的边界情况让我焦虑万分,我一直在想:“要是在这两行代码之间发生了什么稀奇古怪的事,会怎么样呢?” 然后,终于有一天,我再也没有这样的担心了……

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《JavaScript异步编程》其他试读目录

• 第1章:深入理解JavaScript事件
• 1.1.1 现在还是将来运行 [当前]
• 1.1.2 线程的阻塞
• 1.1.3 队列
• 1.2 异步函数的类型
• 1.2.1 异步的I/O函数
• 1.2.2 异步的计时函数
• 1.3 异步函数的编写
• 1.3.1 何时称函数为异步的
• 1.3.2 间或异步的函数
• 1.3.3 缓存型异步函数
• 1.3.4 异步递归与回调存储
• 1.3.5 返值与回调的混搭
• 1.4 异步错误的处理
• 1.4.1 回调内抛出的错误
• 1.4.2 未捕获异常的处理
• 1.4.3 抛出还是不抛出
• 1.5 嵌套式回调的解嵌套
• 1.6 小结