Javascript-在哪里放置常量,全局还是本地?

Javascript-在哪里放置常量,全局还是本地?,javascript,variables,constants,global,local,Javascript,Variables,Constants,Global,Local,我是javascript新手,试图理解全局变量和局部变量。我一直听到“避免全局变量”。我有一堆只在一个函数中使用的字符串变量,所以我应该使它们成为局部变量,对吗?我从来不需要改变它的价值,所以我想知道。。。每次我调用这个函数,这是否意味着所有这些变量都被一次又一次地设置为相同的值。javascript是否需要花费时间或精力反复设置这些变量?是否有更好的方法来处理变量,您知道这些变量永远不会改变值。我的意思是 function test() { var a="the quick brown fox

我是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>
}
功能测试(){
var a=“敏捷的棕色狐狸胡说八道……”;
var b=“你好,世界诸如此类……”;
变量c。。。
变量d…等,等。。。。
}

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

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

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

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

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

没错,每次调用
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

}());
(函数main(){
var a=“敏捷的棕色狐狸胡说八道……”;
var b=“你好,世界诸如此类……”;
变量c。。。
变量d…等,等。。。。
功能测试(){
}
//多次调用test()
}());

没错,每次调用
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

}());
(函数main(){
var a=“敏捷的棕色狐狸胡说八道……”;
var b=“你好,世界诸如此类……”;
变量c。。。
变量d…等,等。。。。
功能测试(){
}
//多次调用test()
}());

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

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

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

建议您避免创建全局变量

如果将代码封装在自调用函数中,则很容易实现这一点:

(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的工作原理:


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

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

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

建议您避免创建全局变量

如果将代码封装在自调用函数中,则很容易实现这一点:

(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的工作原理:


解析变量时,javascript从最里面的作用域开始向外搜索。解析变量时,javascript从最里面的范围开始,向外搜索。你的解决方案不错,但基于问题,这个级别的答案对OP来说是压倒性的。你的解决方案不错,但基于问题,这个级别的答案对OP来说是压倒性的。这只是创建一个函数,而不是调用它。要使它成为IIFE,您需要调用它(例如,
(函数(){}();
而不是
(函数(){});
),这只是创建一个函数,而不是调用它。要使它成为一个IIFE,您需要调用它(例如,
(function(){})(;
而不是
(function(){});