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

标签 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 中定义它们吗?文件?

最佳答案

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

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>

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

关于javascript - 是否可以从外部 JavaScript 内部更改全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14046490/

相关文章:

javascript - HTML5 中是否可以有多个 data-{name} 属性?

javascript - 跨浏览器 3D 动画

python - python wsgi服务器中的全局对象

Python3.6 : Trying to avoid using a global for my swap function with tkinter

c - 为什么我不能创建一个大小由全局变量决定的数组?

javascript - 数据在数据表中返回未定义的ajax加载

javascript - 如果 id 对应则显示元素

jquery - 修复页面中的容器并附加到滚动页脚

javascript - 使用 jQuery sider 防止元素转换

javascript - 如何在 Odoo 14 中搜索 res.partner 记录