单个函数调用期间变量值是否可以改变(来自外部?)

时间:2014-06-20 04:33:21

标签: javascript

我的意思是阅读整个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/

我正在寻找资源来了解异步方法的执行时间,直接答案或清晰度问题。

非常感谢!

2 个答案:

答案 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不同   例如,如果函数在一个线程中运行,则可以在其中停止   任何在另一个线程中运行其他代码的点。

所以这意味着我的思想永远不会被吹灭!