Javascript - 在不同的<script>标签上共享变量

时间:2016-12-02 13:32:41

标签: javascript scope global var

我有一个 test.html 文件,其中包含两个&lt; script&gt; 标记。我需要从一个变量到另一个变量。

&#xA;&#xA;

示例代码:

&#xA;&#xA;

&#xD;&#xA;
& #xD;&#xA;
 &lt; script type =“text / javascript”&gt;&#xD;&#xA; var test = false;&#xD;&#xA;&#xD;&#xA; function testing(){&#xD;&#xA; test = true;&#xD;&#xA;警报('我在里面..');&#xD;&#xA; }&#的xD;&#XA;&#的xD;&#XA; testing();&#xD;&#xA;&lt; / script&gt;&#xD;&#xA; ...&#xD;&#xA;&lt; script type =“text / javascript”&gt;&#的xD;&#XA; if(test == true){&#xD;&#xA;警报( '工作');&#的xD;&#XA; } else {&#xD;&#xA;警报( '失败');&#的xD;&#XA; }&#的xD;&#XA;&LT; /脚本&GT;  
&#的xD;&#XA;
&#的xD;&#XA;
&#的xD; &#xA;

&#xA;&#xA;

输出始终为:

&#xA;&#xA;
&#xA;

我在里面..

&#xA; &#XA;

失败

&#xA;
&#xA;&#xA;

我也尝试使用 window 类,但这没关系.. ( window.test

&#xA;&#xA;

我需要做些什么来获得“工作”警报?

&#xA;&# xA;

谢谢,如果有人可以帮助我。我看到了一些类似的问题,但答案不适合我。

&#xA;&#xA;

编辑:

&#xA;& #xA;

原始代码(简化):

&#xA;&#xA;
 &lt; head&gt;&#xA; ...&#XA; &lt; script type =“text / javascript”src =“detectblocker.js”&gt;&lt; / script&gt;&#xA; &lt;! -  GitHub:https://github.com/sitexw/BlockAdBlock/  - &gt;&#xA; ...&#XA;&LT; /头&GT;&#XA;&LT;身体GT;&#XA; &lt; script type =“text / javascript”&gt;&#xA; var blocker = false;&#xA;&#xA; function adBlockDetected(){&#xA; blocker = true;&#xA;警报( '内部');&#XA; }&#XA;&#XA; if(typeof blockAdBlock ==='undefined'){&#xA; adBlockDetected();&#XA; } else {&#xA; blockAdBlock.onDetected(adBlockDetected);&#XA; }&#XA;&#XA; blockAdBlock.setOption({&#xA; checkOnLoad:true,&#xA; resetOnEnd:true&#xA;});&#xA; &LT; /脚本&GT;&#XA; &lt; div class =“header”&gt;&#xA; ...&#XA; &LT; / DIV&GT;&#XA; &lt; div class =“content_body”&gt;&#xA; &lt; div class =“requirs”&gt;&#xA; &LT; UL&GT;&#XA; ...&#XA; &lt; script type =“text / javascript”&gt;&#xA; if(blocker == true){&#xA;文件撰写( “&LT;李&GT;!启用&LT; /锂&gt;” 中)&#XA; } else {&#xA;文件撰写( “&LT;李&GT;!禁用&LT; /锂&gt;” 中)&#XA; }&#XA; &LT; /脚本&GT;&#XA; ...&#XA; &LT; / UL&GT;&#XA; &LT; / DIV&GT;&#XA; &LT; / DIV&GT;&#XA; ...&#xA;&lt; / body&gt;&#xA;  
&#xA;&#xA;

输出为 alert()“在“并且&lt; li&gt; ”已禁用“..(阻止程序已启用..)。&#xA;唯一的区别是我可以看到的是第一个&lt;的结尾脚本&gt; 标记:

&#xA;&#xA;
  blockAdBlock.setOption({&#xA; checkOnLoad:true,&#xA; resetOnEnd:true&#xA;} );&#xA;  
&#xA;&#xA;

那么为什么代码片段工作而我的代码没有?混乱...

&#XA;

2 个答案:

答案 0 :(得分:0)

如果你没有在变量之前使用var它变成一个全局变量,如

test = true;

变量test在页面期间以及下一个脚本和函数中都将为真。

试试这个:

    <script type="text/javascript">
      var test = false;

      function testing() {
        var test = true;
        alert('I am inside..');
      }

      testing();
    </script>
    ...
    <script type="text/javascript">
      if (test == true) {
        alert('working');
      } else {
        alert('failed');
      }
    </script>

答案 1 :(得分:0)

有两种方法可以做到这一点 1)创建一个隐藏元素,并将您的变量从第一个脚本设置为该元素的属性。 这是你的隐藏元素

<input type="hidden" id="hiddenVar"/>

可以在javascript中设置为

document.getElementById("hiddenVar").setAttribute("myAttr",test)

现在您可以在下一个脚本中获取它

document.getElementById("hiddenVar").getAttribute("myAttr")

2)通过.data(),您可以阅读data format for regions mode