繁体   English   中英

当我需要顶部的函数时,为什么我的脚本中的某些点没有定义函数?

[英]Why is a function not defined at certain points in my script when I am requiring the function at the top?

我正在使用 Javascript 制作游戏。 我使用 webpack 来捆绑我的模块,所以在每个 Javascript 文件的末尾我使用module.exports 下面是一个例子:

//spaceship.js
var Spaceship = function(options) {
  this.position = options.position
  this.name = options.name
}

module.exports = Spaceship


//game.js
var Spaceship = require("./spaceship");

var Game = function() {
  this.num_spaceships = 5;
  this.spaceships = [];
  // DEBUGGER 1
  this.add_spaceships();
}

Game.prototype.add_spaceships = function() {
  // DEBUGGER 2
  for(var i = 0; i < this.num_spaceships; i++) {
    this.spaceships.push(this.randomSpaceship
  }
}

Game.prototype.randomSpaceship = function() {
  //DEBUGGER 3
}

在上面的每个调试点,如果我打开 Chrome 开发工具并输入Spaceship我会得到Uncaught ReferenceError: Spaceship is not defined(…)

如果我改变函数randomSpaceship如下:

Game.prototype.randomSpaceship = function() {
  //DEBUGGER 3
  var s = new Spaceship();
}

然后在调试器 3 中,现在定义了Spaceship (如果我打开开发工具,我会发现 Spaceship 是一个函数)。

为什么会发生这种情况? 我想它可能与变量提升有关,但我在文件 game.js 的顶部声明并分配了变量 Spaceship。

发生这种情况是因为您没有在Gameadd_spaceships函数中使用Spaceship变量,调试点位于add_spaceships DEBUGGER 1add_spaceships DEBUGGER 2调试点,因此 Chrome 不会在闭包中捕获此变量。 DEBUGGER 3您使用变量,因此它被捕获在一个闭包中,您可以检查它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM