Javascript 避免在scroll上声明变量?

Javascript 避免在scroll上声明变量?,javascript,scroll,scope,Javascript,Scroll,Scope,这里我有一些全局范围内的变量,一个函数声明一个变量并给它赋值,然后在scroll上调用这个函数。 这样,在每一个卷轴上,你都要声明“variableFour”,这不是一个好的实践,对吗? 但是,我不想用不必要的变量挤满全局范围,也不能使用IIFE。是否有一种“最佳实践”方法可以在函数外部声明变量,但仍然只能在该函数的范围内使用它 我认为您的代码示例没有任何问题,我严重怀疑变量声明是否会降低代码的速度。我肯定只有在你绝对确定这会引起问题(不会)时才会开始担心这类事情,否则这可能是白费力气 如果您真

这里我有一些全局范围内的变量,一个函数声明一个变量并给它赋值,然后在scroll上调用这个函数。 这样,在每一个卷轴上,你都要声明“variableFour”,这不是一个好的实践,对吗? 但是,我不想用不必要的变量挤满全局范围,也不能使用IIFE。是否有一种“最佳实践”方法可以在函数外部声明变量,但仍然只能在该函数的范围内使用它


我认为您的代码示例没有任何问题,我严重怀疑变量声明是否会降低代码的速度。我肯定只有在你绝对确定这会引起问题(不会)时才会开始担心这类事情,否则这可能是白费力气

如果您真的想对此进行优化,您可以做的一件事是调用
veryInterestingFunction
,也就是说,您不一定需要响应每个滚动事件(取决于您的逻辑)

根据您的问题,IIFE/函数闭包本质上是我所知道的限制JavaScript范围的唯一方法,因此如果您不能使用它,我看不到任何其他选项

在函数外部声明变量,并且仍然只能在该函数的范围内使用它

我想,那是不可能的

当我不想拥挤全局范围时,我将声明一个全局对象,例如
App={}
,并使用它的属性代替全局变量

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();

});

或者您可以使用ES6中的类,在您的范围中声明一个空变量是没有问题的。如果它不是全局的,则它属于范围


没有必要担心表现。如果在范围内声明变量,Javascript
垃圾收集器将为您清空该变量

你的逻辑是“局部变量不好”——事实并非如此。在你的例子中,如果
variableFour
只在
veryInterestingFunction
中使用,那么这就是它所属的。在滚动上声明变量不是一种坏做法吗?不,在我看来不是,我永远不会用(错误的)效率理由将其推广到全局范围,是的,在我的情况下,这可能是更好的选择,非常感谢。
App.variableOne;
App.variableTwo;
App.variableThree;