请参阅下面的代码示例:
( function(){
var test = new p5(
function ( p ){
var x = new Quad(); // Quad is undefined
}
),
Quad = function(){
// some code
}
})();
我怀疑它与外部库(本例中为p5
)有关,因为匿名函数是在new p5()
的上下文中执行的,但我不明白。< / p>
我认为因为Quad
是在主要闭包的范围内定义的,所以它应该可用于该闭包中定义的任何内容......
你能解释一下为什么我的想法错了吗?
答案 0 :(得分:4)
在致电 },您不会将值分配给 切换声明两部分的顺序。 或者使用函数声明(将被挂起)。Quad
之后 p5()
。据推测,它试图立即使用它,此时未定义(虽然已经声明了,因为var
的效果已经应用)。 ( function(){
var Quad = function(){
// some code
}, test = new p5(
function ( p ){
var x = new Quad(); // Quad is undefined
}
)
})();
( function(){
var test = new p5(
function ( p ){
var x = new Quad(); // Quad is undefined
}
);
// Note semi-colon above. You aren't creating multiple variables with `var` in a single statement any more.
function Quad (){
// some code
}
})();
答案 1 :(得分:0)
正如@Quentin正确指出的那样,这是由于vars没有被提升,而不是函数,而是。
在开始实现他的解决方案之后,它让我思考代码分离,并且我意识到我应该将Quad定义拆分成它自己独立的JS文件。
所以我利用require.js并重写代码看起来像这样:
require("Quad", function(){
var test = new p5(
function ( p ){
var x = new Quad(); // Quad is defined in Quad.js, loaded in via require.js
}
)
});