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

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;
});

グローバルを返すグローバルファイルを定義するさらに別の方法:

global.js:

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

mything.js

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

しかし、私はこれらの方法が好きではありません.3.グローバル変数が導入された場合、これが壊れたり、ブラウザ環境のユーザーが定義した場合、GLOBALそれが返されます。

誰かがよりスマートな方法を思いついたかどうかを確認したいと思います。

于 2013-06-05T09:57:37.900 に答える
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 に答える