Javascript - 更改 document.ready 中的全局变量?
Javascript - changing a global variable in document.ready?
我有一个全局变量 numberOfMessages
,我想根据调用 solidity 合约返回的内容立即将其设置为特定数字。加载页面时,在 document.ready 函数中进行调用。但是,变量不会在此函数之外更改。
我的代码基本上是这样的:
var numberOfMessages = 0 // declared outside any function, so should be global
$(document).ready(function () {
Message.deployed().then(function (contractInstance) {
contractInstance.getNumberMessages.call().then(function (v) {
numberOfMessages = v
alert(numberOfMessages) // returns something other than 0
})
})
})
alert(numberOfMessages) // returns 0
如何在加载页面时将全局变量设置为函数returns?
尝试移除
var numberOfMessages = 0
在第一行。如果你给一个没有声明的变量赋值,它会自动成为一个GLOBAL变量。
你的最后一行是 运行 在承诺的 .then()
异步回调之外。这意味着最后一行在文档就绪之前运行,甚至在异步调用完成之前触发 and。
另外,不要使用 alert()
来测试您的代码,因为这样的提示通常是阻塞的,这意味着暂停代码执行并且可以使用异步回调做一些奇怪的事情。而是使用 console.log()
并在浏览器的 Javascript 控制台中查看结果(通常通过按 F12 打开)。
根据其他几个类似的问题,我可以说将您的变量声明为 window.numberOfMessages = 0
。
#3 window.a = 0;
This creates a property on the global object explicitly, using the
window global that refers to the global object (on browsers; some
non-browser environments have an equivalent global variable, such as
global on NodeJS). As it's a normal property, you can delete it.
This property is enumerable, on IE8 and earlier, and on every other
browser I've tried.
以上分类已由here 发布,为您解释什么是全局作用域变量和全局显式变量。
window.numberOfMessages = 0 // This creates a property on the global object explicitly
$(document).ready(function() {
Message.deployed().then(function(contractInstance) {
contractInstance.getNumberMessages.call().then(function(v) {
window.numberOfMessages= v
console.log(window.numberOfMessages) // returns something other than 0
})
})
})
console.log(window.numberOfMessages) // returns 0
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
我有一个全局变量 numberOfMessages
,我想根据调用 solidity 合约返回的内容立即将其设置为特定数字。加载页面时,在 document.ready 函数中进行调用。但是,变量不会在此函数之外更改。
我的代码基本上是这样的:
var numberOfMessages = 0 // declared outside any function, so should be global
$(document).ready(function () {
Message.deployed().then(function (contractInstance) {
contractInstance.getNumberMessages.call().then(function (v) {
numberOfMessages = v
alert(numberOfMessages) // returns something other than 0
})
})
})
alert(numberOfMessages) // returns 0
如何在加载页面时将全局变量设置为函数returns?
尝试移除
var numberOfMessages = 0
在第一行。如果你给一个没有声明的变量赋值,它会自动成为一个GLOBAL变量。
你的最后一行是 运行 在承诺的 .then()
异步回调之外。这意味着最后一行在文档就绪之前运行,甚至在异步调用完成之前触发 and。
另外,不要使用 alert()
来测试您的代码,因为这样的提示通常是阻塞的,这意味着暂停代码执行并且可以使用异步回调做一些奇怪的事情。而是使用 console.log()
并在浏览器的 Javascript 控制台中查看结果(通常通过按 F12 打开)。
根据其他几个类似的问题,我可以说将您的变量声明为 window.numberOfMessages = 0
。
#3 window.a = 0;
This creates a property on the global object explicitly, using the window global that refers to the global object (on browsers; some non-browser environments have an equivalent global variable, such as global on NodeJS). As it's a normal property, you can delete it.
This property is enumerable, on IE8 and earlier, and on every other browser I've tried.
以上分类已由here 发布,为您解释什么是全局作用域变量和全局显式变量。
window.numberOfMessages = 0 // This creates a property on the global object explicitly
$(document).ready(function() {
Message.deployed().then(function(contractInstance) {
contractInstance.getNumberMessages.call().then(function(v) {
window.numberOfMessages= v
console.log(window.numberOfMessages) // returns something other than 0
})
})
})
console.log(window.numberOfMessages) // returns 0
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>