jquerygrep不';不能使用元素属性吗?

jquerygrep不';不能使用元素属性吗?,jquery,grep,Jquery,Grep,我在grep中看到了一些有趣的行为 // where gon.items = array of objects with various properties, one of which is id var id = $(this).data("id") var inventory_item = $.grep(gon.items, function(e){ return e.id == id })[0] => successfully retrieves object var inven

我在
grep
中看到了一些有趣的行为

// where gon.items = array of objects with various properties, one of which is id
var id = $(this).data("id")
var inventory_item = $.grep(gon.items, function(e){ return e.id == id })[0]
=> successfully retrieves object

var inventory_item = $.grep(gon.items, function(e){ return e.id == ($(this).data("id")) })[0]
=> []

正如您所看到的,唯一的区别是,在第一个成功的代码中,我定义了一个单独的id变量。为什么
grep
要求这样,而不允许我传递元素属性?或者我做错了什么?我在文档中找不到解释。

这是因为上下文。将函数传递给
$.grep
时,该函数中的上下文
将显示为
窗口

您可以控制它,并将其绑定到不同的上下文中,如下所示:

var inventory_item = $.grep(gon.items, function(e){ return e.id == $(this).data("id") }.bind(this))[0]

这是因为上下文。将函数传递给
$.grep
时,该函数中的上下文
将显示为
窗口

您可以控制它,并将其绑定到不同的上下文中,如下所示:

var inventory_item = $.grep(gon.items, function(e){ return e.id == $(this).data("id") }.bind(this))[0]

与许多jQuery函数不同,
jQuery.grep()
不会将
this
的上下文更改为当前正在迭代的项。实际上,在
grep
回调中,
this
保留它的全局上下文,并且在浏览器中将引用
窗口
对象。所以很可能是
$(this).data(“id”)==未定义的

下面是一个快速片段,演示了这一点:

var g=[1,2,3];
$.grep(g,功能(项目){
console.log(此===窗口);
返回false;
});

与许多jQuery函数不同,
jQuery.grep()
不会将此
的上下文更改为正在迭代的当前项。实际上,在
grep
回调中,
this
保留它的全局上下文,并且在浏览器中将引用
窗口
对象。所以很可能是
$(this).data(“id”)==未定义的

下面是一个快速片段,演示了这一点:

var g=[1,2,3];
$.grep(g,功能(项目){
console.log(此===窗口);
返回false;
});
console.log($(this))
并查看这是否就是它所指的!!$.grep中的$(this)是什么?
console.log($(this))
并查看这是否是它所指的!!$.grep中的$(此)是什么?