$(".js-order_descent_btn").click(function() { moveDown(this); });和$(".js-order_descent_btn").click(()=> { moveDown(this); });的区别
时间: 2024-03-04 17:54:20 浏览: 106
这两个语句的区别在于它们所使用的函数定义方式不同。
第一个语句使用的是普通的匿名函数,它会在运行时动态地创建一个新的函数对象,并将该函数对象作为`click`事件处理函数。在这个匿名函数内部,`this`会被绑定到被点击的元素上,因此它会作为参数传递给`moveDown`函数。
第二个语句使用的是箭头函数,它会在定义时绑定`this`到它所在的词法作用域上。在这个例子中,箭头函数定义在全局作用域中,因此`this`会被绑定到全局对象上。这就意味着,无论哪个按钮被点击,箭头函数内部的`this`都会指向全局对象,而不是被点击的按钮元素。因此,当箭头函数作为`click`事件处理函数时,它会将全局对象作为参数传递给`moveDown`函数,而不是被点击的按钮元素。
因此,第一个语句会正确地将被点击的按钮元素作为参数传递给`moveDown`函数,而第二个语句会将全局对象作为参数传递给`moveDown`函数,这可能会导致错误的行为。
相关问题
$(".js-order_descent_btn").click(()=> { moveDown(this); });如何保证this就是点击按钮
在这种情况下,箭头函数中的`this`并不会被绑定到被点击的按钮上,因为箭头函数不具有自己的`this`绑定。相反,它会继承它所在的词法作用域中的`this`值。
因此,在这个例子中,箭头函数中的`this`会被绑定到它的外部作用域,也就是全局作用域中的`this`值。这种情况下,无论哪个按钮被点击,箭头函数内部的`this`都会指向全局对象,而不是被点击的按钮元素。
因此,使用箭头函数作为`click`事件处理函数时,无法保证`this`就是被点击的按钮元素。为了解决这个问题,可以使用普通的函数定义方式,或者使用`event.currentTarget`来获取被点击的按钮元素。例如:
```
$(".js-order_descent_btn").click(function(event) {
moveDown(event.currentTarget);
});
```
这样可以确保`moveDown`函数接收到的参数就是被点击的按钮元素。
<button type="button" class="staffDetail-display_order_btn js-order_descent_btn" onclick="moveDown(this);">改成Jquery事件
可以使用以下代码将该按钮的onclick事件改写成jQuery事件:
```
$(".js-order_descent_btn").click(function() {
moveDown(this);
});
```
这会为所有class为"js-order_descent_btn"的按钮绑定click事件,并将按钮元素作为参数传递给`moveDown`函数。这样,当按钮被点击时,就会执行`moveDown`函数并对按钮进行操作。
阅读全文