var variableOne;
var variableTwo;
var variableThree;
function veryInterestingFunction() {
var variableFour;
if(a){
variableFour = 'Good';
}
else {
variableFour = 'Decent';
}
console.log(variableFour);
}
$(window).on('scroll', function(){
veryInterestingFunction();
});
这里我在全局范围内有一些变量,一个声明变量并为其赋值的函数,并在滚动时调用此函数。 这样,在每个卷轴上,您将声明" variableFour"这不是一个好习惯,对吧? 但是,我不想在全球范围内使用不必要的变量,也不能使用IIFE 。是否有最佳实践"在函数外部声明变量的方法,仍然只能在该函数的范围内使用它?
答案 0 :(得分:2)
我认为您的代码示例没有任何问题,我严重怀疑变量声明是否会降低您的代码速度。当你完全确定它会导致问题时,我肯定只会开始担心这种事情(它不会发生),否则可能会浪费精力。
如果您真的想要对此进行优化,那么您可以做的一件事就是debouncing veryInterestingFunction
次来电 - 也就是说,如果您不一定需要回复每一个滚动条事件(取决于你的逻辑)。
根据您的问题,IIFE /函数关闭本质上是我所知道的限制JavaScript范围的唯一方法,所以如果您不能使用它,我就不会看到任何其他选项。< / p>
答案 1 :(得分:2)
在函数外部声明变量,但仍然只能在该函数的范围内使用它?
我想,这是不可能的
当我不想挤占全局范围时,我将声明一个全局对象,例如App = {}
,而不是全局变量,我使用它的属性。
App.variableOne;
App.variableTwo;
App.variableThree;
或者您可以使用ES6中的课程
答案 2 :(得分:2)
将空变量声明到范围中没有问题。如果它不是全局的,则它属于范围。
没有必要担心表现。如果您在范围内声明变量,Javascript garbage collector
将为您清空该变量。 Take a read at this article