是否可以从外部JavaScript内部更改全局变量?

时间:2012-12-26 21:30:15

标签: javascript html global-variables external

我有几个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文件中定义它们?

3 个答案:

答案 0 :(得分: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>

更强大的解决方案是将对象作为上下文创建函数的参数,并从其属性初始化变量;这将使您的设置按名称而不是按位置绑定,并使它们在语法上都是可选的。

答案 1 :(得分:1)

你不能使用src并拥有内容。

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

答案 2 :(得分: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';