如何保存内部范围变量以与外部范围一起使用?

时间:2019-06-24 20:00:01

标签: javascript variables

如何获取变量a,以便可以在1000函数之外使用它?我想将其用于功能data.frame,当我单击按钮时该功能也将运行。那可能吗?

cool

输出超出范围时返回gotSpeech()

2 个答案:

答案 0 :(得分:2)

有很多方法可以解决这个问题。最明显的是将您对guessedCorrect()的调用修改为明确传递:

setTimeout(() => { guessedCorrect(cool); }, 5000);

当然,这意味着您需要修改guessedCorrect()的定义以适应传入的参数,即:

function guessedCorrect(cool) { //...

这具有不通过字符串名称引用函数的优点。正如@Shahzad所说,由于缩小不会更改字符串,因此这会导致代码在缩小时中断。更好的方法是使用函数引用,所以:

setTimeout(guessedCorrect, 5000);

此外,通过使用if/else if块甚至一个对象作为颜色到颜色的映射,可以大大减少您重复的switch()博客。

[编辑]

针对您以后的评论:

this是正在执行当前闭包的上下文。默认上下文(即,直到某些更改)为window。通常情况下,背景是自动设置的,例如在事件回调中,其中this指向触发元素。但是在您的情况下,我们可以(尽管这将是一种相当奇怪的方法)设计this来指向cool的值,所以:

setTimeout(guessedCorrect.bind(cool), 5000);

之后,在this内部调用guessedCorrect()将调出调用函数时存在的cool的值。

答案 1 :(得分:0)

好吧,您实际上需要的是值而不是变量;以及您已经使用Sphinx.java:8: error: cannot access Configuration import api.Configuration; ^ bad source file: .\api\Configuration.java file does not contain class api.Configuration Please remove or make sure it appears in the correct subdirectory of the sourcepath. 点表示法访问的值。

您可以尝试这样的事情:

speechRec.resultString

如果您的// An modification that the post from above offers you, which is pretty good for this case. value-to-colours const colors = { 0: '#dc3545', 5: '#dc3545', 10: '#dc3545', 15: '#dc3545', 20: '#dc3545', }; function gotSpeech() { if (speechRec.resultValue) { zero.style.color = colors[speechRec.resultString]; } } button.addEventListener("click", function(event) { resetround(); speechRec.start(); // Why are you passing the functions as string? // Better do this setTimeout(getComputerChoice, 3000); setTimeout(identifyHands, 3000); clearInterval(myInterval); myInterval = setInterval(function() { time--; if (time == -1) { button.innerHTML = "Again"; clearInterval(myInterval); time = 4; } else { button.innerHTML = "Start"; numbers.innerHTML = time; } }, 1000); setTimeout(guessedCorrect.bind(null, speechRec.resultString), 5000); }) 函数是从另一个文件导出的,那么我将使用guessedCorrect函数使用给定的参数创建一个新函数。否则,如果您在同一文件中具有该函数,则只需传递如下函数:

bind

并且在函数中只需使用全局变量setTimeout(guessedCorrect, 5000);

  

注意:尝试使用严格比较(speechRec.resultString)而不是抽象(===)。