【问题标题】:Javascript - Where to put Constants, Global or Local?Javascript - 在哪里放置常量,全局或本地?
【发布时间】:2015-04-07 18:48:24
【问题描述】:

我是 javascript 新手,试图了解全局和局部变量。我一直听到“避免全局变量”。我有一堆仅在一个函数中使用的字符串变量,所以我应该将它们设为本地,对吗?我从不需要更改那里的值,所以我想知道...每次我调用该函数时,这是否意味着所有这些变量都会一次又一次地设置为相同的值。一遍又一遍地设置这些变量是否需要 javascript 任何时间或精力?有没有更好的方法来处理你知道永远不会改变值的变量。这就是我要说的......

function test() {
var a="the quick brown fox blah blah blah...";
var b="Hello world blah blah blah....";
var c...
var d.... etc, etc....
<more code goes here>
}

在我看来,每次我调用 test() 时,所有变量都会重新设置。如果我将它们放在函数之外,它们不会只设置一次吗?但这会使它们成为全球性的,对吧?

【问题讨论】:

  • 解析变量时,javascript从最里面的范围开始向外搜索。

标签: javascript variables constants global local


【解决方案1】:

并不是说它真的会对性能产生影响,但是您可以将它们排除在全局范围之外,但仍然只定义一次:

(function() {
    var a = "a";
    var b = "b";
    window.test = function() {
        console.log(a);
    };
})();

【讨论】:

  • 您的解决方案很好,但基于问题,这个级别的答案对于 OP 来说将是压倒性的。
【解决方案2】:

您可以拥有任意数量的变量。我怀疑您是否会创建这么多可能影响应用程序性能的变量。

您应该始终牢记的是您的应用程序的清晰性。代码必须可读。

如果您只在函数中使用变量,那么您也应该在该函数中声明它。

建议您避免创建全局变量。

如果您将代码包装在自调用函数中,这很容易实现:

(function() {
    var CONSTANTS = {
        key: "VALUE",
        key2: "VALUE2",
    };

    function doSomething() {
        var local_property = "foo";
        console.log(CONSTANTS.key2); // it works
    }
} ());

doSomething(); // error
console.log(CONSTANTS.key); // you won't be able to access it here

我建议您阅读以下文章,以便更好地了解 JavaScript 的工作原理:

Variable statement

Closures

Grammar and types

【讨论】:

    【解决方案3】:

    你说得对,每次调用 test 函数时都会设置这些变量,因此将它们移到函数之外是个好主意(可能有一些解释器优化可以防止任何性能损失,但我仍然认为这是代码可读性的好主意)。

    最好的解决方案是将所有代码包装在立即调用的函数表达式 (IIFE) 中,如下所示:

    (function main() {
    
        var a="the quick brown fox blah blah blah...";
        var b="Hello world blah blah blah....";
        var c...
        var d.... etc, etc....
    
        function test() {
            <more code goes here>
        }
    
        // call test() many times
    
    }());
    

    【讨论】:

    • 这只是创建一个函数,而不是调用它。要使其成为 IIFE,您需要调用它(例如 (function () {})(); 而不是 (function () {});