我正在开发 CodeIgniter 应用程序。
我有一个 View ,我们称它为日历,它有一个 JS/jQuery <script>
挡在里面。看起来像这样:
$(document).ready(function() {
$("#day_list").fadeIn(600);
// init
var current_month = <?= $init['current_month']; ?>;
var current_year = <?= $init['current_year'] ?>;
// previous, next month ajax call
$(".previous, .next").click(function(event) {
// do stuff to these variables, then ajax call.
$.ajax({
// ajax
});
});
});
在另一个 View 中,我的页脚有另一个脚本 block ,它应该使用相同的变量(current_month 和 current_year)。但是,它不知道它们的存在。从第一个 <script>
传递这些变量的最快、最简单的方法是什么?阻止另一个?由于我的应用程序的构建方式,我无法将这两个 block 放在一起。我应该只为它编写一个函数来获取并返回这些值(我应该怎么做?我是个新手)还是有更简单的方法?
非常感谢!
最佳答案
学习在 JavaScript 中为变量命名空间非常重要。范围很重要,而且非常重要。现在因为您正在使用“var”关键字,所以您的内容将在本地范围内。
这里的其他一些答案说您应该将它们移到全局范围内。这行得通,除非其他东西无意中覆盖了它们。我非常不同意这种方法,全局范围变量在 JavaScript 中是不好的做法。
命名空间是这样工作的:
var foo = foo || {} //Use existing foo or create an empty object.
foo.bar = foo.bar || {}
foo.bar.baz = foo.bar.baz || {}
等等等
这可能看起来需要做更多的工作,但它也可以保护您的变量。
您还可以添加一个简单的命名空间函数,该函数可以安全地将所有内容命名为 window 对象。 (我很久以前从某个地方抄袭了这个,我想我修改了一点但也许没有)。
把它放在你的应用程序的顶部,你可以用 $.namespace("myapp.mydata") 命名空间,然后说 myapp.mydata.currentYear = ...
$.namespace = function() {
var a=arguments, o=null, i, j, d;
for (i=0; i<a.length; i=i+1) {
d=a[i].split(".");
o=window;
for (j=0; j<d.length; j=j+1) {
o[d[j]]=o[d[j]] || {};
o=o[d[j]];
}
}
return o;
};
此外,如果您是新手,或者想成为硬核,我建议您阅读 Crockford 的 JavaScript the Good Parts。
关于javascript - 在多个 <script> block 中共享 JS 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5781197/