我的意思是阅读整个ECMA5-6规范,咳嗽,但也许你们都可以帮助我了!
在JavaScript中执行单个调用的过程中,变量是否可以从“外部”更改?
伪javascript示例:
window.foo = true;
startSomeLoopMutatingFoo();
function f() {
var a = window.foo;
// Insert long, blocking work here, none of which mutates window.foo
var b = window.foo; // again
if (a != b) { totalMindExplosion() }
}
我的思绪会被吹嘘吗?在任何可以想象的情况下都可以调用totalMindExplosion()吗?
这是一个促进思维压缩的JS小提琴:http://jsfiddle.net/Mf3rc/
我正在寻找资源来了解异步方法的执行时间,直接答案或清晰度问题。
非常感谢!
答案 0 :(得分:1)
不,不会调用totalMindExplosion()。
执行时,闭包(函数)中的代码会阻止进程,没有机会执行其他代码。
示例:
function(){
var a = 1;
window.setTimeOut(function(){console.log(a);}, 0);
a = 2;
}()
这将记录2而不是1,即使超时为0秒。只有在执行完整功能之后才会调用console.log函数,到那时,变量' a'已设为2。
答案 1 :(得分:0)
从上面及时评论中的链接https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/EventLoop
“运行到完成”
在完成任何其他消息之前,将完全处理每条消息 处理。这在推理你的时候提供了一些不错的属性 程序,包括每当一个函数运行时,它不能 被抢占并将在任何其他代码运行之前完全运行(和 可以修改函数操作的数据)。这与C不同 例如,如果函数在一个线程中运行,则可以在其中停止 任何在另一个线程中运行其他代码的点。
所以这意味着我的思想永远不会被吹灭!