Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS-变量范围和初始化内部函数_Javascript - Fatal编程技术网

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

Javascript JS-变量范围和初始化内部函数,javascript,Javascript,我不明白为什么下面的代码不起作用 var test=null; (function(){ var Class=... test=new Class(); })(); test.doSomething();// ERROR test is null 正如我所知,如果我不使用var声明变量,那么js必须找到当前范围(函数)之外的变量。请说我做错了什么 编辑 完整代码: var Application=null; require(["Aqua","$"],function(Aqua,

我不明白为什么下面的代码不起作用

var test=null;
(function(){
 var Class=...
 test=new Class();
})();
test.doSomething();// ERROR test is null
正如我所知,如果我不使用var声明变量,那么js必须找到当前范围(函数)之外的变量。请说我做错了什么

编辑
完整代码:

  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");
    }); 

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

这对我来说很好:

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

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

Require是一个异步依赖项库,因此底线是
应用程序。do(“aaa”)不在回调中。在require.js回调之前,使用
Application=newclass()调用该底线部件已运行


正是出于这个原因,您在下面的示例中解决了这个问题。

@Jonast92但这是一种生活。立即调用。又名Synchronus。@Jonast92错误,完全错误。它对我有用;你能发布完整的代码吗?无论如何,@PashaTurok现在你已经从一个iLife变为一个异步回调,这改变了一切。谢谢你抽出时间。我知道require是异步库——它异步加载模块。但是我们确实调用了require()方法。所以必须先执行。请解释一下。你先调用它,但这并不意味着它已经完成了执行,它可以并行发生。它必须通过AJAX异步获取资源。通过阅读AJAX及其工作原理或JavaScript事件循环方法,可以了解更多信息。回调代码在JavaScript执行堆栈上等待,直到JavaScript在require函数调用下面的行(如
Application.do(“aaa”))上主动完成运行。关键是require.js正在使用这些(AJAX和事件循环)工具来“并行”完成任务。感谢您的详细解释。我认为require()是另一种方式。现在我明白了。