javascript - 在多个 <script> block 中共享 JS 变量

标签 javascript ajax codeigniter variables

我正在开发 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 - 在多个 &lt;script&gt; block 中共享 JS 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5781197/

相关文章:

javascript - 基本时间表表 - 使用 ajax 请求和 jquery

php - 如何在 PHP 中按行长度限制文本?

javascript - 单击时覆盖图像居中的图像

javascript - 如果使用jquery ajax表中的数据,如何动态选择下拉列表

javascript - 选择未在 Material 设计中呈现 - 意外标记 `<`

javascript - 在 Ubuntu 14.04 上配置 apache 2.4 以启用 CORS

javascript - Codeigniter 3 上的 loadData() 函数

mysql - codeigniter mysql View 与查询

javascript - 下拉选择用隐藏按钮填充 div,然后单击时用隐藏内容填充另一个 div

javascript - jQuery 计算滴仙