jquery.each() - "this"vs valueOfElement

Joh*_*han 7 javascript jquery

在jQuery.each()循环中,我一直认为这this相当于valueOfElement.有人可以解释这个区别吗?

例:

$.each(object, function(i, val){
    $('body').append('<b>valueOfElement:</b> ' + typeof val + ' - ' +  
    '<b>this: </b>' + typeof this + '<br/>');
});
Run Code Online (Sandbox Code Playgroud)

结果:

valueOfElement: string - this: object
valueOfElement: boolean - this: object
valueOfElement: object - this: object
Run Code Online (Sandbox Code Playgroud)

小提琴

Den*_*ret 14

答案在您链接到的文档中:

也可以通过this关键字访问该值,但Javascript将始终将此值包装为Object,即使它是一个简单的字符串或数字值.

访问时,所有值都嵌入到对象中this.

真正的原因可以在这行jQuery源代码中找到:

callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
Run Code Online (Sandbox Code Playgroud)

你可以将它与之比较

(function(){console.log(this)}).call(1);
Run Code Online (Sandbox Code Playgroud)

构建一个Number,因为你不能在不是对象的东西上调用函数.

来自MDN的呼叫功能:

thisArg:

请注意,这可能不是方法看到的实际值:如果方法是非严格模式代码中的函数,则null和undefined将替换为全局对象,并且原始值将被加框.

我将使用唯一看到的优点this,而不是valueOfElement有:

  • 简单性:您不必记住给回调的参数顺序
  • this即使valueOfElement是原始类型,也能直接使用函数

  • 很棒的解释! (2认同)