JavaScript学习问题:无法获取函数返回值,如何将随机数设为全局变量?
问题原因
- 首先,
addEventListener方法本身没有返回值,你将它的执行结果赋值给randomNumber,自然得到的就是undefined,这个方法的作用只是绑定点击事件的回调函数,不会返回回调函数的执行结果。 - 其次,JS代码是在页面加载完成后同步执行的,你写的两个
console.log会在代码加载时立刻运行,此时用户还没有点击「Generate Pin」按钮,randomDigit函数根本没有触发,自然取不到生成的随机数,输入框的value也还是初始空值。
实现方案
你需要先在全局作用域声明randomNumber变量,然后在randomDigit回调函数中给这个全局变量赋值,就可以在代码任意位置访问到最新生成的随机数了。
修正后的JS代码如下:
var randomNumberDisplayEl = document.getElementById("random-number-display"); var generateBtnEl = document.getElementById("generate-btn"); // 全局声明randomNumber var randomNumber; function randomDigit() { var randomEl = parseInt(Math.random() * 10000); randomNumberDisplayEl.value = randomEl; // 给全局变量赋值 randomNumber = randomEl; // 这里可以测试是否赋值成功,点击按钮后才会打印有效值 console.log("生成的随机数是:", randomNumber); console.log("输入框值是:", randomNumberDisplayEl.value); return randomEl; } // 只绑定事件,不需要接收返回值 generateBtnEl.addEventListener("click", randomDigit);
注意事项
如果你要在其他逻辑中使用randomNumber,需要确保触发时机是在用户点击按钮之后,否则变量值还是初始的undefined。比如你要做pin校验的逻辑,应该在校验按钮的点击回调里读取randomNumber的值,而不是页面刚加载就读取。
内容的提问来源于stack exchange,提问作者Satyajit Roy
相关产品推荐
相关产品推荐

