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

时间:2013-10-17 15:04:41

标签: 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 variable
   foo = 'updated by jquery' 

 });

bar = foo;

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

3 个答案:

答案 0 :(得分:3)

因为您只在foo上更新ready event,但是你想要在准备好的火灾之前记录

试试这个

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

答案 1 :(得分:1)

它不会将值设置为'由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

因此,如果您需要更新的值,则需要在文档.ready内的第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
});

答案 2 :(得分:0)

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

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