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
,因为它是一个类,并且您正在使用newRequire是一个异步依赖项库,因此底线是应用程序。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()是另一种方式。现在我明白了。