数值未设置由于范围问题

时间:2019-02-02 05:10:00

标签: javascript scope

这是我在论坛上的第一篇文章,请保持友善。

以下是我的代码:

var powerValue = 0;

  for(let l = 0; l < array.length; l++) {
    let path = pathfind.findPath(coordX, coordY, powerSourceIndex[l][0], powerSourceIndex[l][1], function(path) {
      if(path !== null) {
        powerValue = 1;
        console.log("set value = " + powerValue)
      }
    });
    pathfind.calculate();
    console.log("second read = " + powerValue)
  }

我知道powerValue确实被设置为1,因为我看到我的控制台上的“设定值= 1”。然而,我还请参阅 “第二读取= 0”

我知道已经问过类似的问题,但是其中很多似乎与异步功能有关。以异步类似,该功能似乎有某种分离范围,但它不完全是一个异步。

我已经做了研究,相信我,我尽力了!但是由于我对这个特定问题缺乏了解,我似乎找不到解决问题的方法。

任何帮助将不胜感激!

TLDR:我知道由于控制台日志记录而将powerValue设置为1,但在“第二次读取”时为0

2 个答案:

答案 0 :(得分:0)

let pv = 0;
for (var i=0; i<5; i++) {
	let path = function() {
		pv = 1;
		console.log("set value = " + pv);
  };
	path();
  console.log("second read = " + pv);
}

只是想达到不使用磁带库。值,你会得到正确的,因为在这里运行的路径()的全局变量值设置为1。

答案 1 :(得分:0)

  

变量在自声明的执行功能是,默认情况下,只有提供给自执行功能中的代码。

Read More

如果你希望你的变量函数外被修改为好,不要使用自动执行功能。因此,您可以这样做,例如:

function is_path_null(path) {
  if(path !== null) {
    powerValue = 1;
    console.log("set value = " + powerValue)
  }
}
//...
let path = pathfind.findPath(coordX, coordY, powerSourceIndex[l][0], powerSourceIndex[l][1], is_path_null(path) {
  //...
}
pathfind.calculate();
is_path_null(path);
console.log("second read = " + powerValue)