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/