无法在函数内部更新全局变量并在函数外部调用它(jQuery)
Unable to update global variable inside a function and call it outside it (jQuery)
我读过一些关于这个主题的其他问题,许多人说,如果我在函数外声明变量varA
(在全局作用域内),它是一个全局函数,因此它可以被任何函数使用和更新,对吗?
现在,我有这个例子,我在函数外声明一个变量,在函数内改变它,但是当我在函数外调用它时,它显示为undefined
,如果我在函数内调用它,它被改变了。
$(document).ready(function() {
var varA;
$(function() {
varA = 'varA has been altered!';
alert(varA); //displays 'varA has been altered!'
});
alert(varA); //displays 'undefined'
});
这对我来说似乎不合乎逻辑:当我改变一个全局变量时,第二个alert();
不应该显示varA
的值吗?
这个问题的解决方法是什么?我怎么能改变一个全局变量内的函数,并得到该值外的函数?
欢呼编辑:我需要能够在多个函数中访问varA
,所以它需要在$(function() {});
问题是访问varA
有一个竞争条件:如果$(function() {});
下面的代码在函数内部的代码之前运行,那么它将不会被定义。
在这种情况下,$(document).ready()
和$()
是一样的,所以document
应该已经在函数中准备好了。因此,您可以直接运行
$(function() {
var varA;
varA = 'varA has been altered!';
alert(varA); //displays 'varA has been altered!'
});
这不是作用域的问题:这里有一个例子,作用域是类似的,但是竞争条件被删除了,所以代码可以工作:
$(function() {
var varA;
var def = $.Deferred();
def.then(function() {
varA = 'varA has been altered!';
}).then(function() {
alert(varA); //displays 'varA has been altered!'
});
def.resolve();
});
正如@mc10提到的,这主要是由于访问varA
的竞争条件造成的。这是因为$(document).ready()
在回调调用之前等待readystatechange
事件作为准备就绪而触发,但是它也运行setTimeOut
来检查readystatechange
事件是否已经触发。
因此任何像
这样的代码$(document).ready(function(){
a();
$(b);
c();
});
将按顺序执行
- c
- b
默认情况下,javascript变量得到'undefined'作为值,直到他们被分配一些值。在这种情况下,你的内部函数并没有首先执行,警报首先执行,在那个时候变量的值是"未定义",所以你得到相同的。
要避免这种情况,您可以尝试如下操作:
$(document).ready(function () {
var varA;
(function () {
varA = 'varA has been altered!';
console.log(varA); //displays 'varA has been altered!'
}());
console.log(varA); //displays 'varA has been altered!'
});
- 执行ajax成功函数-jQUERY
- 函数jquery.html()不提供数据属性集值
- 将变量放入ajax函数JQuery
- 函数jquery的未定义返回
- 如何在嵌套函数jquery上保持变量的值不变
- 用我的函数jquery给出数据/参数
- Firefox在调用函数(jquery)时冻结
- 在传递节时触发一个函数 - jquery
- 循环执行数组函数jQuery
- 在函数中调用另一个函数JQuery
- 对象不是函数-Jquery/JavaScript
- TypeError:对象不是函数-jquery
- 获取函数jQuery设置的属性
- 从函数jquery获取更新的变量值
- 切换而不是悬停函数jQuery
- 函数jQuery.animation()运行了两次行,但不起作用
- 使用函数 jQuery 获取变量
- 自执行函数 jquery 与 JavaScript 的区别
- 从回调函数 -JQuery 获取返回值
- 一个接一个地执行函数 JQUERY