Global variables in Javascript across multiple files
我的一些javascript代码在一个名为helpers.js的外部文件中。在调用这个javascript代码的HTML中,我发现自己需要知道是否调用了helpers.js中的某个函数。
我试图通过定义以下内容来创建全局变量:
1 | var myFunctionTag = true; |
在我的HTML代码和helpers.js中的全局范围内。
我的HTML代码如下所示:
1 2 3 4 5 6 7 8 | <html> ... <script type='text/javascript' src='js/helpers.js'> ... 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 |
我想做的是可行的吗?
在包含helpers.js文件之前,需要声明变量。只需在include for helpers.js上面创建一个脚本标记,并在那里定义它。
1 2 3 4 5 6 7 | <script type='text/javascript' > var myFunctionTag = false; <script type='text/javascript' src='js/helpers.js'> ... <script type='text/javascript' > // rest of your code, which may depend on helpers.js |
变量可以在
1 2 3 4 5 6 7 8 9 10 11 12 | var myFunctionWasCalled = false; function doFoo() { if (!myFunctionWasCalled) { alert("doFoo called for the very first time!"); myFunctionWasCalled = true; } else { alert("doFoo called again"); } } |
还有一个测试页面:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <html> <head> Test Page <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <script type="text/javascript" src="helpers.js"> </head> <body> <p> myFunctionWasCalled is <script type="text/javascript">document.write(myFunctionWasCalled); </p> <script type="text/javascript">doFoo(); <p> Some stuff in between </p> <script type="text/javascript">doFoo(); <p> myFunctionWasCalled is <script type="text/javascript">document.write(myFunctionWasCalled); </p> </body> </html> |
您将看到测试
好了,伙计们,这也是我的小测试。我也遇到了类似的问题,所以我决定测试3种情况:
所有结果与预期一致。
与浏览教程不同,我发现更容易尝试,所以我做到了。我的结论是:无论何时在HTML页面中包含外部JS文件,外部JS的内容在呈现页面之前都会"复制/粘贴"到HTML页面中。如果愿意的话,也可以进入PHP页面。如果我错了,请纠正我。谢谢。
我的示例文件如下:
外部JS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var global = 0; function f1() { alert('fired: f1'); global = 1; alert('global changed to 1'); } function f2() { alert('fired f2'); alert('value of global: '+global); } |
HTML 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <script type="text/javascript" src="external.js"> External JS Globals - index.php </head> <body> <button type="button" id="button1" onclick="f1();"> fire f1 </button> <br /> <button type="button" id="button2" onclick="f2();"> fire f2 </button> <br /> </body> </html> |
HTML 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <script type="text/javascript" src="external.js"> External JS Globals - index2.php </head> <body> <button type="button" id="button1" onclick="f1();"> fire f1 </button> <br /> <button type="button" id="button2" onclick="f2();"> fire f2 </button> <br /> </body> </html> |
嗨,要将值从一个JS文件传递到另一个JS文件,我们可以使用本地存储概念
1 2 3 4 5 6 7 | <body> <script src="two.js"> <script src="three.js"> <button onclick="myFunction()">Click me</button> <p id="demo"> </p> </body> |
Two.js文件
1 2 3 4 5 | function myFunction() { var test =localStorage.name; alert(test); } |
JS文件
1 | localStorage.name = 1; |
//javascript文件1
1 | localStorage.setItem('Data',10); |
//javascript文件2
1 | var number=localStorage.getItem('Data'); |
别忘了用html()链接JS文件。
您可以使JSON对象如下:
1 | globalVariable={example_attribute:"SomeValue"}; |
在文件中
从fileb.js访问它,比如:
我认为您应该使用"本地存储"而不是全局变量。
如果您担心在非常老的浏览器中可能不支持"本地存储",请考虑使用现有的插件来检查"本地存储"的可用性,如果"本地存储"不可用,请使用其他方法。
我使用了http://www.jstorage.info/,到目前为止我对它很满意。