【问题标题】:How can I return a value from function with multiple nested functions in Javascript?如何从 Javascript 中具有多个嵌套函数的函数返回值?
【发布时间】:2019-03-19 18:31:15
【问题描述】:

问题:我想从其父方法之外的嵌套方法中调用一个值。换句话说,我想要“console.log(someObjects[i].valueChecker);”的输出要么是“真”,要么是“假”。但是,它只是返回函数本身。

到目前为止我所做的:所以我一直在搜索网络/堆栈溢出以寻找解决方案,但要么我没有找到解决方案,要么我无法理解它。我认为这与“闭包”有关,我见过的大多数问题的解决方案都是从子方法返回,然后从父方法返回子方法。然而,每次我尝试这个时,我都遇到了很多错误——或者另一个子方法突然不存在,或者代码运行了,但输出仍然是一个函数。我想知道有多种方法是否会影响问题。

背景:我在做一个平台游戏,同一个敌人有多种类型。我想检查玩家和武器之间的碰撞,因此需要来自敌人函数的一些值(我不想使用“类”这个词,但我不确定合适的术语)。不过,我对 Java 更熟悉,所以无法创建一个单独的类而只有一种方法可以让我返回值,这让我很沮丧。

//assume all the other html/main stuff is already set up
var temp = {
  create: c4,
  update: u4
}
MyObject = function(value) {
  this.value = value; //passed in value
  var magicNumber = 4; //local value initialized/declared

  this.valueChecker = function() {
    //return boolean
    return this.value == this.magicNumber;
  }

  this.otherValueChecker = function() {
    //return boolean
    return (this.value + 1) == this.magicNumber;
  }
}

//just make the space bar tied to a boolean
var someKeyPress;

function c4() {
  someKeyPress = game.input.keyboard.addKey(Phaser.Keyboard.A);
}

var someObjects = [];
//... later on in the program, presuming key already coded
function u4() {
  //add a new MyObject to array someObjects
  if (someKeyPress.isDown) {
    //check with various random numbers between 3 to 5
    someObjects.push(new MyObject(game.rnd.integerInRange(3, 5)));
  }

  //run through MyObject(s) added to someObjects, and see if any match number
  for (var i = 0; i < someObjects.length; i++) {
    console.log(someObjects[i].valueChecker);
  }
}



/* current output
    ƒ () {
        //return boolean
		return this.value == this.magicNumber;
	}
    */

【问题讨论】:

  • 我没有详细阅读代码——但是如果你记录函数的实际返回值,而不是函数本身,它会不会起作用。也就是console.log(someObjects[i].valueChecker())?
  • 你将不得不真正调用使用()的方法来调用它并得到它的结果......不,这与闭包几乎没有任何关系
  • 首先,非常感谢 cmets。在编辑代码以调用方法 console.log(someObjects[i].valueChecker()) 并使语句始终为 true(又名 MagicNumber 和 this.value 始终等于 4)后,它似乎总是打印 false 无论如何。跨度>
  • var magicNumber = 4 声明了一个从未使用过的局部变量。您需要将其更改为 this.magicNumber = 4 或更改您的 valueChecker 方法以检查 magicNumber
  • @Robin Zigmond 做到了。非常感谢!显然,这一直是一个真正简单的修复,而我在 javascript 中的新手是真正的问题。我需要刷新本地/全局变量

标签: javascript closures nested-function


【解决方案1】:

试试

console.log(someObjects[i].valueChecker())

因为我将值检查器视为一个函数

this.valueChecker = function() 

【讨论】:

  • 感谢您的帖子。但是,在这样做之后,它现在似乎总是错误的。这也是在将magicnumber和this.value设置为4之后。当然,这可能是我的逻辑其他地方的问题,但我至少看不到它。
猜你喜欢
  • 1970-01-01
  • 2011-03-31
  • 2015-08-01
  • 2011-03-23
  • 1970-01-01
  • 2015-03-15
  • 2018-07-16
  • 1970-01-01
相关资源
最近更新 更多