javascript - 为什么这个对象不在范围内?

标签 javascript scope closures p5.js

请参阅下面的代码示例:

( 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/

相关文章:

javascript - onKeyDown 从 e.target.value 获取值?

javascript - require() 相当于 if import { Something } from 'somewhere'

javascript - 在这种情况下如何使变量全局可访问?

ios - 如何在返回值之前等待关闭完成

python - 用闭包模拟python中的静态变量

javascript - 如果 Javascript 中的 "with"语句创建了一个新的作用域,为什么这个闭包每次都不包含新作用域中的新的 "x"?

javascript - 触发函数后停止刷新页面

javascript - Javascript 中允许点(方法调用)之前的空格吗?

python - 为什么 `if False`后面的导入会生成局部变量?

c++ - 在 C++ 中声明实例变量而不构造它们的好方法是什么?