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

您应该认真考虑更改脚本以允许创建可用于调用库函数的上下文对象;这将消除您对全局变量的依赖(应该避免),同时还允许在同一页面上使用两个不同的上下文。例如,如果你现在有这个:

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>

然后,服务器端脚本必须读取$_GET['foo']$_GET['bar']回显自定义生成的 javascript:

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 回答