请参阅下面的代码示例:
( function(){
var test = new p5(
function ( p ){
var x = new Quad(); // Quad is undefined
}
),
Quad = function(){
// some code
}
})();
我怀疑它与外部库(本例中的p5
)有关,因为匿名函数是在new p5()
的上下文中执行的,但我没看懂。
我认为因为 Quad
是在主闭包的范围内定义的,所以它应该可用于该闭包内定义的任何内容......
你能解释一下为什么我的想法是错误的吗?
最佳答案
在调用 p5()
之后之前,您不会为 Quad
赋值。据推测,它会尝试立即使用它,此时未定义(尽管已声明,因为 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
}
})();
关于javascript - 为什么这个对象不在范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28509869/