Javascript中的全局变量跨多个文件的问题

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (812)

我的一些JavaScript代码位于名为helpers.js的外部文件中。在调用这个JavaScript代码的HTML里面,我需要知道helpers.js中的某个函数是否被调用过。

我试图通过定义来创建一个全局变量:

var myFunctionTag = true;

在全球范围内,在我的HTML代码和helpers.js。

下面是我的HTML代码的样子:

<html>
...
<script type='text/javascript' src='js/helpers.js'></script>    
...
<script>
  var myFunctionTag = false;
  ...
  //I try to use myFunctionTag here but it is always false, even though it has been se t to 'true' in helpers.js
</script>
提问于
用户回答回答于

在包含helpers.js文件之前,需要声明变量。只需在helpers.js的include上面创建一个脚本标记,并在那里定义它。

<script type='text/javascript' > 
  var myFunctionTag = false; 
</script>
<script type='text/javascript' src='js/helpers.js'></script>     
... 
<script type='text/javascript' > 
  // rest of your code, which may depend on helpers.js
</script>
用户回答回答于

变量可以在.js文件中声明,只需在HTML文件中引用即可。我的版本helpers.js

var myFunctionWasCalled = false;

function doFoo()
{
    if (!myFunctionWasCalled) {
        alert("doFoo called for the very first time!");
        myFunctionWasCalled = true;
    }
    else {
        alert("doFoo called again");
    }
}

在一个页面上测试它:

<html>
<head>
<title>Test Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script type="text/javascript" src="helpers.js"></script>
</head>

<body>


<p>myFunctionWasCalled is
<script type="text/javascript">document.write(myFunctionWasCalled);</script>
</p>

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

<p>Some stuff in between</p>

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

<p>myFunctionWasCalled is
<script type="text/javascript">document.write(myFunctionWasCalled);</script>
</p>

</body>
</html>

你会看到测试alert()会显示两个不同的东西,写入到页面的值将会第二次不同。

扫码关注云+社区

领取腾讯云代金券