JS - 变量范围和初始化内部函数

时间:2014-12-14 16:52:20

标签: javascript

我无法理解为什么以下代码无效。

var test=null;
(function(){
 var Class=...
 test=new Class();
})();
test.doSomething();// ERROR test is null

据我所知,如果我不使用var声明变量,则必须在当前范围(函数)之外找到变量。请说出我做错了什么。

修改
完整代码:

  var Application=null;
    require(["Aqua","$"],function(Aqua,$){
        var Class = Aqua.Application.extend();
        Application = new Class();
    }); 
Application.do("aaa");//Application is null

但以下工作

  var Application=null;
    require(["Aqua","$"],function(Aqua,$){
        var Class = Aqua.Application.extend();
        Application = new Class();
        Application.do("aaa");
    }); 

2 个答案:

答案 0 :(得分:2)

Require是一个异步依赖库,因此底线Application.do("aaa");不在回调中。在使用Application = new Class();部分的require.js回调运行之前调用该底线。

出于这个原因,你已经在最底层的例子中解决了它。

答案 1 :(得分:0)

也许你在省略的部分做错了什么?

这对我来说很好用:

var test=null;
(function () {
    var Class = function () {
        this.doSomething = function () { console.log('hey'); }
    };
    test = new Class();
})();
test.doSomething();// prints hey

请注意,您需要添加this,因为它是一个类,而您正在使用new