我是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()时,所有变量都会再次设置。如果我将它们放在功能之外,那么它们只会被设置一次吗?但那会让他们变得全球化,对吧?
答案 0 :(得分:4)
并不是说它在性能方面确实会有所不同,但你可以将它们排除在全球范围之外,但仍然只定义它们一次:
(function() {
var a = "a";
var b = "b";
window.test = function() {
console.log(a);
};
})();
答案 1 :(得分:0)
你是对的,每次调用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
}());
答案 2 :(得分:0)
您可以拥有任意数量的变量。我怀疑你是否会创建如此多的变量,它可能会影响你的应用程序性能。
您应始终牢记的是应用程序的清晰度。代码必须是可读的。
如果你只在一个函数中使用一个变量,那么你也应该在该函数中声明它。
建议您避免创建全局变量。
如果将代码包装在自调用函数中,则很容易实现:
(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的工作原理: