【问题标题】:Avoid declaring variables on scroll?避免在滚动时声明变量?
【发布时间】:2015-12-08 13:07:03
【问题描述】:
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/

【问题讨论】:

标签: javascript scroll scope


【解决方案1】:

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

我想这是不可能的

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

App.variableOne;
App.variableTwo;
App.variableThree;

或者你可以在 ES6 中使用类

【讨论】:

  • 是的,在我的情况下,这可能是更好的选择,谢谢!
【解决方案2】:

我认为您的代码示例没有任何问题,我严重怀疑变量声明是否会减慢您的代码速度。我肯定只会在您绝对确定它会导致问题(不会)时才开始担心这种事情,否则可能会浪费精力。

如果你真的想优化这个,你可以做的一件事是debouncingveryInterestingFunction 调用——也就是说,如果你不一定需要响应每个滚动事件(取决于你的逻辑)。

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

【讨论】:

    【解决方案3】:

    在你的作用域中声明一个空变量是没有问题的。如果不是全局的,则属于作用域。

    而且无需担心性能。如果您在您的范围内声明变量,Javascript garbage collector 将为您清空该变量。 Take a read at this article

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多