1

複数の異なるページで再利用したいJavaScript関数がいくつかあるので、関数の外部.jsファイルを作成しました。実際の.jsファイルを変更せずに、そのjavascriptのグローバル変数を変更できるかどうか疑問に思いました。これが私が意味することの例です:

外部JavaScript用に次のタグがあるとします。

<script src="myscripts.js"></script>

<script>どういうわけか、そのようにタグ内のスクリプトのグローバル変数を定義できますか?

<script src="myscripts.js">
    sampleglobalvariable = "somevalue";
    sampleglobalvariable2 = "somevalue2";
</script>

またはそうですか?

<script src="myscripts.js"></script>
<script>
    sampleglobalvariable = "somevalue";
    sampleglobalvariable2 = "somevalue2";
</script>

または、実際のmyscripts.jsファイル内でそれらを定義する必要がありますか?

4

3 に答える 3

2

ライブラリ関数の呼び出しに使用できるコンテキストオブジェクトを作成できるように、スクリプトを変更することを真剣に検討する必要があります。これにより、グローバル変数への依存関係が削除され(回避する必要があります)、同じページで2つの異なるコンテキストを使用できるようになります。たとえば、これが今ある場合:

var sampleGlobalVariable = 'default1';
var sampleGlobalVariable2 = 'default2';

function foo() {
    alert(sampleGlobalVariable);
}

代わりにこれを行うことを検討してください。

// Rename this function to something specific to your script, to
// prevent possible name clashes.
function createScriptContext(sampleGlobalVariable, sampleGlobalVariable2) {
    if (sampleGlobalVariable === undefined) {
        sampleGlobalVariable = 'default1';
    }
    if (sampleGlobalVariable2 === undefined) {
        sampleGlobalVariable2 = 'default2';
    }

    var that = {};

    that.foo = function () {
        alert(sampleGlobalVariable);
    };
}

次に、ページからこの関数を使用して、他のスクリプトで使用されるコンテキストを作成できます。

<script type="text/javascript">
    var pageGlobalContext = createScriptContext('value1', 'value2');

    // ... later ...

    pageGlobalContext.foo();

    // ... or use default values ...

    var defaultPageGlobalContext = createScriptContext(undefined, undefined);
</script>

より堅牢なソリューションは、コンテキスト作成関数への引数としてオブジェクトを受け取り、そのプロパティから変数を初期化します。これにより、設定が位置ではなく名前でバインドされ、構文的にすべてオプションになります。

于 2012-12-26T21:39:04.357 に答える
1

srcを使用してコンテンツを作成することはできません。

<script>
    sampleglobalvariable = "somevalue";
    sampleglobalvariable2 = "somevalue2";
</script>
<script src="myscripts.js"></script>
于 2012-12-26T21:35:53.773 に答える
1

あなたはこれを行うことができます:

<script>
    var sampleglobalvariable = "somevalue";
    var sampleglobalvariable2 = "somevalue2";
</script>

<script src="myscripts.js"></script>

myscripts.js以前に定義されたグローバル変数にアクセスできます。

myscripts.jsまたは、サーバー側スクリプト(たとえば、PHPで記述)に変換することもできます。これにより、次のようなパラメータを渡すことができます。

<script src="myscripts.js?foo=1&bar=2"></script>

サーバーサイドスクリプトは、カスタム生成されたjavascriptを読み取っ$_GET['foo']$_GET['bar']エコーバックする必要があります。

echo 'var sampleglobalvariable = ' . json_encode($_GET['foo']) . ';';
echo 'var sampleglobalvariable2 = ' . json_encode($_GET['bar']) . ';';
echo 'alert(sampleglobalvariable);  // rest of the script, etc';
于 2012-12-26T21:38:27.037 に答える