从 HTML 中的另一个脚本调用变量

Call variable from another script in HTML

我目前有一个 HTML 文件,其中有一个声明如下的脚本:

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
  <script type="text/javascript">                         
 $(document).ready(function() {                           
    code.......
    var a = "hello"
});                                             
  </script>              

我正在尝试在 HTML 文件中添加另一个脚本,该脚本将调用此变量 "a"。现在,我正在做这样的事情:

<script type="text/javascript">                               
    alert(a);                                                              
</script>

但它没有发出任何警报。如果我将 a 替换为 "hello" 之类的字符串,我会收到警报。我调用变量错误吗?我试过寻找解决方案,但他们都说你应该能够轻松地从另一个脚本调用变量,假设该脚本之前已声明和初始化。谢谢

a 声明移到函数之外。

例如,

var a;

$(document).ready(function() {                           
    code.......
    a = "hello"
}); 

然后……

alert(a);

请记住,变量是 函数作用域,因此如果您在函数内部定义它,它将在函数外部不可见。


根据评论更新:

因为您现在在尝试与 a 变量交互时遇到计时问题,我建议引入事件总线(或其他一些机制)来协调计时。鉴于您已经在使用 jQuery,您可以创建一个简单的总线,如下所示:

var bus = $({});

bus.on('some-event', function() {});
bus.trigger('some-event', ...);

这实际上也有助于一些更好的代码组织,因为现在你真的只需要总线是全局的,你可以在事件中传递数据,而不是一堆其他随机变量。

例如,

var bus = $({});

$(document).ready(function() {                           
    var a = 'hello';
    bus.trigger('some-event', { a: a });
}); 

然后在您的其他文件中:

bus.on('some-event', function(e, data) {
    alert(data.a);
});

JSBin example(显然没有分布在多个文件中,但同样的原则适用)。

将您的代码替换为

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript"> 
    var a="";                        
    $(document).ready(function() {                           
        a = "hello";      
    });                                             
</script> 

现在您可以访问变量 a,如下所示。

<script type="text/javascript">                               
    alert(a);                                                              
</script>

您的代码的问题在于,您在 $(document).ready() 中声明了变量 a,这使其成为 ready().

的本地变量

当你编写一个内部功能块时,你将其设为局部变量,你可以将变量声明移到功能块外部,如其他答案所述,或者你可以使用:

$(document).ready(function() {                           
    window.a = "hello";
});

及以后:

alert(a);

在这两种情况下,您都将 a 声明为全局变量,不建议这样做。