javascript - 使用 Require.js 设置和获取全局变量

标签 javascript backbone.js requirejs global-variables

我正在使用 require.js 和backbone.js。我试图设置一个变量,然后通过使用 Require 调用包含该变量的模块,在整个应用程序的多个 View 中使用它。该模块是:

define(function (require) {
    "use strict";

    var variable_a = "aaa", variable_b ="bbb" ;

    var some_variables = (function () {

        return {
            setVariableA: function (x) {
                variable_a = x;
            },
            return_a: variable_a,
            return_b: variable_b
        };

    })();

    return some_variables;
});

在我看来,我包含模块,然后设置变量,然后检查它是否已设置:

someVariables.setVariableA('456');
console.log('someVariables.return_a is ');
console.log(someVariables.return_a);

但这会返回“aaa”而不是“456”。我做错了什么?

最佳答案

这是 javascript 中非常常见的事实。当您分离范围时,即编写类似

(function(){ ... })()

此子作用域从父作用域获取所有内容的副本。由于父作用域中有原始数据类型(例如 string),因此子作用域保存原始数据的副本。因此,您在子作用域中所做的任何更改都不会反射(reflect)在父作用域中。

解决方法是将原始数据更改为对象,以便子对象保留引用。例如

define(function (require) {
    "use strict";

    var variables = {
    a : "aaa", 
    b : "bbb" 
};

var some_variables = (function () {

    return {
        setVariableA: function (x) {
            variables.a = x;
        },
        return_variables: variables
    };

})();

return some_variables;
});

并且调用将更改为

    some_variables.setVariableA('456');
console.log('someVariables.return_a is ');
console.log(some_variables.return_variables.a);

这将为您提供您所期望的456

关于javascript - 使用 Require.js 设置和获取全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24325722/

相关文章:

javascript - 主干 View 的默认值

javascript - 如何防止 javascript/backbone.js 克隆模型共享属性

javascript - TypeScript requirejs 加载外部模块的问题

javascript - RequireJS动态加载模块,无需导入所有模块

Javascript 在特定时间内显示多个通知

javascript - 加载时打开选项卡(有序列表)?

templates - 如何使用 underscore.js 输出 JSON 对象?

javascript - 如何在 reactjs 调用周围包装 handleClick

Javascript 获取 css 高度属性

javascript - 带有 requirejs 的 Emberjs 路由器