Javascript 使用Jquery更新全局JS变量并返回该值

Javascript 使用Jquery更新全局JS变量并返回该值,javascript,jquery,variables,global,Javascript,Jquery,Variables,Global,我需要编写一个函数,在这里我可以在纯js中设置一个全局变量,用jQuery函数更新它的值,然后将通过jQuery函数更新的值分配到一个普通的javasciprt变量中 下面是代码示例: var foo; // global variable in plain js var bar; // second global variable jQuery(document).ready(function ($) { // jquery function that updates the var

我需要编写一个函数,在这里我可以在纯js中设置一个全局变量,用jQuery函数更新它的值,然后将通过jQuery函数更新的值分配到一个普通的javasciprt变量中

下面是代码示例:

var foo; // global variable in plain js
var bar; // second global variable
jQuery(document).ready(function ($) { 

   // jquery function that updates the variable
   foo = 'updated by jquery' 

 });

bar = foo;

console.log(bar); // console should read 'updated by jquery' but it says undefined

因为您仅在
ready event
上更新
foo
,但您要在ready激发之前绑定日志

试试这个

jQuery(document).ready(function ($) { 
// jquery function that updates the variable
  foo = 'updated by jquery';
  console.log(foo);
});

因为您仅在
ready event
上更新
foo
,但您要在ready激发之前绑定日志

试试这个

jQuery(document).ready(function ($) { 
// jquery function that updates the variable
  foo = 'updated by jquery';
  console.log(foo);
});

您的代码实际上应该可以正常工作。但是如果我们按顺序使用注释作为标记(因此#2=“//更新变量的jquery函数”),请记住它将按顺序[#1、#3、#2]运行,因为当文档准备就绪时,ready()函数将在其他函数之后运行


只要任何需要foo的代码在ready函数之后运行,它就应该正确地读取它。

您的代码实际上应该工作正常。但是如果我们按顺序使用注释作为标记(因此#2=“//更新变量的jquery函数”),请记住它将按顺序[#1、#3、#2]运行,因为当文档准备就绪时,ready()函数将在其他函数之后运行


只要任何需要foo的代码在ready函数之后运行,它就应该正确地读取它。

它不会将值设置为“由jquery更新”,因为该更新将在文档准备就绪时进行,而
console.log(foo)
是全局函数的一部分,它将在前面按顺序发生,而不是按文档就绪函数调用

所以从本质上说,

var foo; // #1
$(function ($) { 
  foo = 'updated by jquery';
  console.log(foo); // output : updated by jquery //#3
});

console.log(foo); // output : undefined //#2
执行的顺序是#1#2#3

因此,如果需要更新的值,则需要在文档中的第3点访问它。更改后准备就绪。或者,您可以在值更改后使用Jquery事件引发/触发事件,如-

foo='updated';
var event = jQuery.Event( "myEvent" );
$('body').trigger(event);

// The following can now be outside of document ready
$('body').on('myEvent',function(){
   // Access updated foo value here
});

它不会将值设置为“由jquery更新”,因为该更新将在文档准备就绪时进行,而您的
console.log(foo)
是全局函数的一部分,它将按照文档准备就绪函数调用之前的顺序进行

所以从本质上说,

var foo; // #1
$(function ($) { 
  foo = 'updated by jquery';
  console.log(foo); // output : updated by jquery //#3
});

console.log(foo); // output : undefined //#2
执行的顺序是#1#2#3

因此,如果需要更新的值,则需要在文档中的第3点访问它。更改后准备就绪。或者,您可以在值更改后使用Jquery事件引发/触发事件,如-

foo='updated';
var event = jQuery.Event( "myEvent" );
$('body').trigger(event);

// The following can now be outside of document ready
$('body').on('myEvent',function(){
   // Access updated foo value here
});


加载DOM时将更新
foo
,因为它位于document.ready()函数中。但是,在加载页面之前,
console.log
将立即执行。我如何才能做到这一点?因为我需要传递jquery所做的更改并更新全局变量。
foo
将在加载DOM时更新,因为它位于document.ready()函数中。但是,在加载页面之前,
console.log
将立即执行。我如何才能做到这一点?因为我需要传递jquery所做的更改并更新全局变量。这并不能解决我的问题,因为我正在尝试更新全局变量,并且我需要在函数运行后使该更改可用。@n00b3,最初指定一些默认值。比如
var foo='yes'@n00b3在函数运行后可用。这个问题是直到jQuery的
DOMReady
事件触发,函数才会运行。如果您需要它,请从
DOMReady
将其展开,或者延迟需要该变量的函数,直到触发
DOMReady
事件。这并不能解决我的问题,因为我正在尝试更新全局变量,并且我需要在函数运行后该更改可用。@n00b3,最初指定一些默认值。比如
var foo='yes'@n00b3在函数运行后可用。这个问题是直到jQuery的
DOMReady
事件触发,函数才会运行。如果您需要它,请从
DOMReady
打开它,或者延迟需要变量的函数,直到触发
DOMReady
事件。感谢您的重播。是的,我了解这一点,如何更改它,以便获得由函数更新的返回值?该函数不需要在文档上运行。就绪您可以使用事件来执行此操作,请检查我的更新应答谢谢您的重播。是的,我了解这一点,如何更改它,以便获得由函数更新的返回值?函数不需要在文档上运行。Ready您可以使用事件来执行此操作,请检查我的更新答案如何更改此代码,以便在函数运行后获得更新的值?…您不必更改它。在函数运行后,确实会获得更新的值。但是函数运行的时间比您想象的要晚;中间部分仅在文档准备就绪后运行,但外部代码块(函数上方和下方)将在此之前执行。另一种方法是,如果您需要其值立即可用,则将变量设置为该函数之外的值。如何更改此代码,以便在函数运行后获得更新的值?…您不必更改它。在函数运行后,确实会获得更新的值。但是函数运行的时间比您想象的要晚;中间部分仅在文档准备就绪后运行,但外部代码块(函数上方和下方)将在此之前执行。另一种方法是,如果您需要其值立即可用,则将变量设置为该函数之外的值。