Javascript 未指定闭包变量
简单地说,我有以下几点:Javascript 未指定闭包变量,javascript,closures,Javascript,Closures,简单地说,我有以下几点: jQuery.fn.X = function(){ var elements = jQuery(this); elements.click(function(){ var self = jQuery(this); //elements here is not defined why? }); 为什么不在单击函数中定义元素,而将其作为闭包变量?这是创建jQuery插件的正确方法 jQuery.fn.X = func
jQuery.fn.X = function(){
var elements = jQuery(this);
elements.click(function(){
var self = jQuery(this);
//elements here is not defined why?
});
为什么不在单击函数中定义
元素
,而将其作为闭包变量?这是创建jQuery插件的正确方法
jQuery.fn.X = function () {
// here, "this" will be a jQuery object containing all elements you matched
// with X(). You must return that object.
return this.click(function () {
// here, "this" will be a DOM element. You don't have to return it.
var self = jQuery(this);
// ...
});
});
必须返回jQuery才能保持方法链接正常工作。这是创建jQuery插件的正确方法
jQuery.fn.X = function () {
// here, "this" will be a jQuery object containing all elements you matched
// with X(). You must return that object.
return this.click(function () {
// here, "this" will be a DOM element. You don't have to return it.
var self = jQuery(this);
// ...
});
});
您必须返回jQuery以保持方法链接工作。除非在单击处理程序出现之前重新分配了
元素
,否则它不会在那里“未定义”(未定义
?)-是的,变量绑定在闭包中。代码不是上下文不完整,就是观察到的症状不正确。@Hogan:他可能不想使用这个。因为,它将指向元素
中的一个元素
,不创造一个终结?你是什么意思@Hogan@Hilmi-原型的元素被复制到新对象中,因此它们没有闭包--它们有一个空闭包--这就是为什么在函数调用时没有定义元素--它是从“其他地方”调用的没有相同的闭包。除非在单击处理程序出现之前重新分配了元素
,否则它不会在那里“未定义”(未定义
?)——是的,变量绑定在闭包中。代码不是上下文不完整,就是观察到的症状不正确。@Hogan:他可能不想使用这个。因为,它将指向元素
中的一个元素
,不创造一个终结?你是什么意思@Hogan@Hilmi-原型的元素被复制到一个新对象中,因此它们没有闭包--它们有一个空闭包--这就是为什么在函数调用中没有定义元素--它是从没有相同闭包的“其他地方”调用的。您忘记了每个元素。jquery chaineable应该处理所有匹配elements@RoyiNamir不,我没有。您不必使用each()
click()
也将处理所有匹配的元素,就像几乎所有其他jQuery API函数一样。我会做$.fn.plugin_name=function(){返回这个.each(function(){});}
@Tomalak是真的,但我没有看到很多情况下插件只是调用jQuery方法,就是这样…@RoyiNamireach()
返回它所操作的完全相同的jQuery对象,所以是的,它“返回自己”。(($x=$($a”);$y=$x.each(function(){/*…*/});alert($x===$y);
将提醒true
)您忘记了每一项。jquery Chaineable应处理所有匹配elements@RoyiNamir不,我没有。您不必使用each()
单击()
也将处理所有匹配的元素,就像几乎所有其他jQuery API函数一样。好吧。我会做$.fn.plugin_name=function(){返回这个。each(function(){};};
@Tomalak True,但我没有看到很多情况下插件只调用jQuery方法,就是这样…@RoyiNamireach()
返回与它操作的jQuery对象完全相同的对象,因此是的,它“返回自身”。(($x=$($a”);$y=$x.each(function(){/*…*/});alert($x===$y);
将发出警报true
)