{each()的两次调用之间的“ this”会发生什么?

时间:2019-07-31 13:53:08

标签: 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(...),不是吗?

1 个答案:

答案 0 :(得分:2)

并不是每次都调用.each方法两次,而是每次调用它的方式。

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

第二次,您将debugn函数作为参数传递给每个函数,每个函数依次调用console.debug方法,但是此方法的上下文已更改,因为您直接将函数作为每个函数的参数传递了进来。

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

if(x===true)