3

您能否在使用严格模式的同时获得全局范围,并确保您可以在非窗口环境中运行。

请参阅以下示例:

define(['other', 'thing'], function() {
    // this === window in desktop environment
    // this === GLOBAL in node environment
});
define(['other', 'thing'], function() {
    "use strict";
    // this === undefined in desktop environment
    // this === GLOBAL in node environment
    // As of my understanding node has to be configured using `node --use_strict`
    // (http://stackoverflow.com/questions/9031888/any-way-to-force-strict-mode-in-node)
    // But that not the point.
});

有什么办法可以在里面获取全局变量(window/ GLOBALdefine

4

5 回答 5

8
var global = Function("return this")();

如果您无权访问Function,那么也尝试

var Function = function(){}.constructor,
    global = Function("return this")();
于 2013-06-11T12:22:17.473 回答
1

这可能有帮助,也可能没有帮助,但我确实想出了一种方法来使用以下代码覆盖 requirejs 模块的上下文......

require.s.contexts._.execCb = function(name, callback, args) {
    return callback.apply(/* your context here */, args);
};

同样,不确定这是否会有所帮助use strict,但谁知道...... :)

https://gist.github.com/jcreamer898/5685754

于 2013-06-12T02:12:49.163 回答
0

到目前为止,我所做的一切:

(function(root) { // Here root refers to global scope
    define('mything', ['other', 'thing'], function() {

    });
}(this);

但是我不能用它r.js来缩小我的应用程序。

另一个可能是检查使用什么:

define(['other', 'thing'], function() {
    var root = typeof GLOBAL != 'undefined' ? GLOBAL : window;
});

还有另一种方法来定义一个返回全局的全局文件:

全球.js:

define(function() {
    return typeof GLOBAL != 'undefined' ? GLOBAL : window;
});

神话.js

define(['global', 'other', 'thing'], function(root) {
    // root === window/GLOBAL
});

但我不喜欢这些方式,因为如果引入了一些 3. 全局变量,这会破坏,或者如果浏览器环境中的用户定义了GLOBAL,那么它将被返回。

我想看看是否有人提出了更聪明的方法。

于 2013-06-05T09:57:37.900 回答
0

如果您将窗口引用存储在另一个普遍可访问的对象上,例如 Object.prototype 或类似的东西怎么办?

于 2013-06-09T10:16:38.767 回答
0

这是我通常做的(它适用于浏览器、node.js 和 RingoJS——即使在严格模式下):

if (!global) var global = this;

define(['other', 'thing'], function() {
    // use global
});

define(['other', 'thing'], function() {
    "use strict";
    // use global
});

阅读以下 StackOverflow 线程了解更多详细信息:在 JavaScript 中定义全局对象的实现独立版本

于 2013-06-13T06:12:49.913 回答