当前位置: 首页 > 面试题库 >

有人可以解释Java语言中的“反跳”功能吗

长孙作人
2023-03-14
问题内容

我对javascript中的“反跳”功能感兴趣,写在这里:

不幸的是,代码的解释不够清楚,我无法理解。谁能帮我弄清楚它是如何工作的(我在下面留下了我的评论)。简而言之,我真的不明白这是如何工作的

   // Returns a function, that, as long as it continues to be invoked, will not
   // be triggered. The function will be called after it stops being called for
   // N milliseconds.


function debounce(func, wait, immediate) {
    var timeout;
    return function() {
        var context = this, args = arguments;
        var later = function() {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) func.apply(context, args);
    };
};

编辑:复制的代码片段以前callNow在错误的位置。


问题答案:

问题中的代码与链接中的代码略有不同。在链接中,(immediate&&!timeout)在创建新的timout之前要进行检查。之后拥有它会导致即时模式从不触发。我已经更新了答案,以便从链接中注释工作版本。

function debounce(func, wait, immediate) {

  // 'private' variable for instance

  // The returned function will be able to reference this due to closure.

  // Each call to the returned function will share this common timer.

  var timeout;



  // Calling debounce returns a new anonymous function

  return function() {

    // reference the context and args for the setTimeout function

    var context = this,

      args = arguments;



    // Should the function be called now? If immediate is true

    //   and not already in a timeout then the answer is: Yes

    var callNow = immediate && !timeout;



    // This is the basic debounce behaviour where you can call this

    //   function several times, but it will only execute once

    //   [before or after imposing a delay].

    //   Each time the returned function is called, the timer starts over.

    clearTimeout(timeout);



    // Set the new timeout

    timeout = setTimeout(function() {



      // Inside the timeout function, clear the timeout variable

      // which will let the next execution run when in 'immediate' mode

      timeout = null;



      // Check if the function already ran with the immediate flag

      if (!immediate) {

        // Call the original function with apply

        // apply lets you define the 'this' object as well as the arguments

        //    (both captured before setTimeout)

        func.apply(context, args);

      }

    }, wait);



    // Immediate mode and no wait timer? Execute the function..

    if (callNow) func.apply(context, args);

  }

}



/////////////////////////////////

// DEMO:



function onMouseMove(e){

  console.clear();

  console.log(e.x, e.y);

}



// Define the debounced function

var debouncedMouseMove = debounce(onMouseMove, 50);



// Call the debounced function on every mouse move

window.addEventListener('mousemove', debouncedMouseMove);


 类似资料:
  • 问题内容: 我看到的唯一的void返回类型在方法中具有System.out.println语句。因此,一旦调用该方法,这些字符串就会被打印出来。 您是否可以使返回类型为字符串并让该字符串返回而不是执行void返回类型? 如果void返回类型方法中包含其他方法,您能否将返回类型设为该方法给出的值,该值将返回该方法的结果? 什么时候只能使用void返回类型? 问题答案: 有人可以解释Java中的voi

  • 问题内容: 年复一年,我试图了解部分与内存模型和并发交易的Java规范。我不得不承认我失败了。是的,我了解锁和“同步”,wait()和notify()。我可以很好地使用它们,谢谢。对于“ volatile”的作用,我什至不清楚。但是所有这些都不是来自语言规范,而是来自一般经验。 这是我要问的两个示例问题。我对特定答案不太感兴趣,因为我需要了解答案是如何从规范中得出的(或者可能是我得出结论,规范没有

  • 问题内容: 当我将字符串值1和7存储到“ mykey”中时, redis中到底存储了 什么?以及getbit在redis中如何工作? 有人试图在该值内循环位吗? 我知道bitcount会给我2,但我也想从中获得确切的字符串值1和7,这可能吗? -- 我通过使用erlang redis客户端读取输出进行了一些实验。 erlang输出: 然后删除此条目: 我做同样的事情来偏移2 4 8,在这里您可以看

  • 问题内容: 越来越多地使用Python,并且不断看到在不同文件中设置的变量。有人可以解释这是什么吗? 问题答案: 这是该模块的公共对象的列表,由解释import 。它覆盖了默认的内容,即隐藏以下划线开头的所有内容。

  • 问题内容: 我只是在android上开始,而我的java很生锈。我不记得曾经见过像这样嵌套在另一个函数中的函数。有人可以向我确切解释final的作用,并解释为什么您要在另一个函数中嵌套这样的功能吗? 问题答案: 这是一个匿名类。实际发生的情况是正在使用重写的函数创建 的子类。 关于匿名类的最优雅的事情之一是,它们使您可以在需要的地方准确定义单发类。此外,匿名类具有简洁的语法,可减少代码中的混乱情况

  • 问题内容: 只是想知道是否有人尝试过将新的Java 7语言功能用于Android?我知道Android会读取Java吐出的字节码并将其转换为dex。所以我想我的问题是它可以理解Java 7的字节码吗? 问题答案: 如果你使用的是Android Studio,则应自动启用Java 7 语言,而无需任何补丁。尝试资源要求API级别为19+,并且缺少NIO 2.0。 如果你无法使用Java 7功能,请参