避免在滚动时声明变量?

时间:2015-12-08 13:07:03

标签: javascript scroll scope

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 。是否有最佳实践"在函数外部声明变量的方法,仍然只能在该函数的范围内使用它?

http://jsfiddle.net/2jyddwwx/1/

3 个答案:

答案 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