在两次调用 .each() 之间 'this' 会发生什么?
What happens to 'this' between two calls of .each()?
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 函数作为参数传递给 each 函数,后者又调用 console.debug 方法,但此上下文已更改,因为您直接将函数作为参数传递给每个函数。
简短回答:您首先做的方式就是 Jquery 希望您做的方式。如果您有要调用的命名函数,只需在匿名函数中调用它,就像您第一次那样
input.each( function(){
debugn(this)
} );
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 函数作为参数传递给 each 函数,后者又调用 console.debug 方法,但此上下文已更改,因为您直接将函数作为参数传递给每个函数。
简短回答:您首先做的方式就是 Jquery 希望您做的方式。如果您有要调用的命名函数,只需在匿名函数中调用它,就像您第一次那样
input.each( function(){
debugn(this)
} );