7

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

例子:

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

结果:

valueOfElement: string - this: object
valueOfElement: boolean - this: object
valueOfElement: object - this: object

小提琴

4

2 回答 2

14

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

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

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

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

callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {

你可以把它比作

(function(){console.log(this)}).call(1);

它构建 a Number,因为您不能在不是对象的东西上调用函数。

MDN 上调用函数

这个参数

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

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

  • 简单:你不必记住给回调的参数的顺序
  • this即使valueOfElement是原始类型,也可以直接使用函数
于 2012-10-29T14:15:59.987 回答
0

关键字将this作为 JavaScript 对象访问元素。您可以像获取任何其他 JavaScript 对象一样获取它的值,或者您可以将其包装 ( $(this)) 以使其成为 jQuery 对象。

于 2012-10-29T14:18:12.480 回答