Jquery 理解此逻辑中匿名函数的需要

Jquery 理解此逻辑中匿名函数的需要,jquery,Jquery,我正在学习web开发,现在正在做jquery部分。我有一个逻辑问题,这样我就能理解语法背后的逻辑,这样我就能更好地理解它 基于这种逻辑: $(document).ready(function() { $("p").on({ mouseenter: function() { $(this).css("background-color", "yellow"); }, mouseleave: function() { $(this).css("bac

我正在学习web开发,现在正在做jquery部分。我有一个逻辑问题,这样我就能理解语法背后的逻辑,这样我就能更好地理解它

基于这种逻辑:

$(document).ready(function() {
  $("p").on({
    mouseenter: function() {
      $(this).css("background-color", "yellow");
    },
    mouseleave: function() {
      $(this).css("background-color", "pink");
    },
    click: function() {
      $(this).css("background-color", "red");
    }
  })
})
  • 为什么函数在
    .ready
    之后进入
    ()
    内部,而不像其他任何类似的方法或函数:
    .ready(){function应该在这里?}
    ?我的意思是通常在
    ()
    中,你给出的是一组参数,而不是代码本身,不是吗

  • 为什么我必须声明一个匿名函数,而不能简单地将代码放在
    mouseenter
    之后?在事件发生之前,它无论如何都不会执行,所以为什么我必须声明匿名函数并有一组附加的花括号?我的意思是为什么我必须这样做:

  • mouseenter:function(){
    $(this.css(“背景色”、“黄色”);
    }
    
    与此相反:

    mouseenter: $(this).css("background-color", "yellow");
    
    多谢各位

    1) 为什么函数在
    .ready
    之后进入
    ()
    内部,而不像其他任何类似的方法或函数:
    .ready(){function应该在这里?}
    ?我的意思是通常在
    ()
    中,你给出的是一组参数,而不是代码本身,不是吗

    这是因为您将匿名函数作为参数提供给
    ready
    事件处理程序。然后在触发事件时调用此函数。这是回调模式,在整个jQuery中非常普遍

    2) 为什么我必须声明一个匿名函数,而不能简单地将代码放在
    mouseenter
    之后?在事件发生之前,它无论如何都不会执行,所以为什么我必须声明匿名函数并有一组附加的花括号

    如果不将逻辑放入函数中,它将立即被调用,因此您的断言是不正确的。如果以这种方式执行,则将
    css()
    调用的结果分配给
    mouseenter
    处理程序(这是
    $)
    jQuery对象,它也将在不同的范围内执行,因此
    将不是对引发事件的元素的引用,而是持有
    mouseenter
    键的对象,而不是要运行的函数。这正是您需要将逻辑封装在匿名函数中的原因;这样,逻辑可以在需要时执行,而不是立即执行

    这两个问题似乎都是由于对匿名函数的使用感到困惑所致。它们可以声明为变量,并在需要时调用之前作为变量传递,例如:

    var foo=function(){
    log('hello');
    }
    函数dosomethingafter3秒(操作){
    设置超时(操作,3000);
    }
    
    3秒后的剂量(foo)Rory非常感谢。您已经为我指明了回调函数的正确路径。非常感谢你的解释。没问题,很乐意帮忙。