jquery - 两次调用 .each() 之间 'this' 会发生什么?

标签 jquery firefox console each greasemonkey-4

FF 68.0.1 中的 GM 脚本中的以下代码:

let input = $( 'input#id' );

input.each( function(){console.debug(this)} );
input.each( debugn(this) );

function debugn( message ) {
  console.debug(message)
}

首先打印:

<input id="id" ...>

正如预期的那样,但是:

Sandbox { browser: {...

即使内部迭代器在第一次调用时被消耗并且在第二次调用时未初始化(尽管 .each() 没有提到这种行为),它也不应该打印 Sandbox 对象,而只是简单地打印不调用 debugn(...),不是吗?

最佳答案

这并不是关于您调用 .each 方法两次的事实,而是您每次调用它的方式。

第一次调用匿名函数时,该函数又调用 console.debug 方法并将其作为参数传递。

第二次,您将 debugn 函数作为参数传递给 every 函数,该函数又调用 console.debug 方法,但上下文已更改,因为您直接将函数作为 every 函数的参数传递。

简短回答:您首先执行的方式就是 Jquery 希望您执行的方式。如果您想调用一个命名函数,只需在匿名函数中调用它,就像第一次一样

input.each( function(){
  debugn(this)
} );

关于jquery - 两次调用 .each() 之间 'this' 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57292440/

相关文章:

javascript - jQuery 如果不起作用?

javascript - 从 firefox 扩展新加载的选项卡中列出并调用 js 函数

javascript - jQuery 对话框延迟了 Firefox 中的 CSS 更改,但我没有在开发控制台中看到相应的更改

grails - Grails 3:控制台插件不在生产模式下出现

java - 如何在 Java 中创建命令行(控制台)

javascript - HTML Javascript - 获取所有具有 ID 的元素

javascript - 如何在字段更新时选中复选框

firefox - 是否可以通过插件在 Firefox 上设置配置设置

javascript - 如何在 Internet Explorer 中使用控制台日志记录?

javascript - 如何查找包含特定数字的任何数字 - 例如 1323 包含数字 "2"