Javascript范围意外结果

时间:2016-01-02 00:09:07

标签: javascript node.js scope

我已经和这个问题争了几个小时了,我在node.js中运行的js代码在下面。

var app = angular.module('App', []);

app.service('DataSet1', function(){
    this.initialize = function(){
        //.. returns promiese
    }
});
app.service('DataSet2', function(){
    this.initialize = function(){
        //.. returns promiese
    }
});
app.service('DataSet3', function(){
    this.initialize = function(){
        //.. returns promiese
    }
});

我认为因为变量已经由函数exec创建的父作用域声明,所以我可以为它赋值。有人可以解释我做错了什么以及访问超出范围变量的正确方法吗?

1 个答案:

答案 0 :(得分:3)

您的问题不是范围,而是同步性问题。

在Node.js中,大多数函数默认是异步的,这意味着无论这些函数是否实际运行完毕,程序的执行都会继续。

所以会发生在传递给console.log(exampleVar)的函数之前执行的最后exec有时间执行(因为IO操作通常比执行缓存的JS代码慢)。

请参阅this primer以获得更深入的解释。