[英]Javascript closure (using parameter name to define an object in the same function)
[英]JavaScript: Using same name for class/function and object?
我看过这里 ,基本上(据我所知)您不能对函数和对象使用相同的名称,但是看下面的代码,情况似乎并非如此。 谁能告诉我这是如何工作的?
;(function($){
$.fn.superfish = function(op){
var sf = $.fn.superfish,
c = sf.c,
$arrow = $(['<span class="',c.arrowClass,'"> »</span>'].join('')),
...
};
var sf = $.fn.superfish;
...
sf.c = {
bcClass : 'sf-breadcrumb',
menuClass : 'sf-js-enabled',
anchorClass : 'sf-with-ul',
arrowClass : 'sf-sub-indicator',
shadowClass : 'sf-shadow'
};
...
})(jQuery);
超级鱼在其声明中引用了自己。 这不会导致无限递归吗?
这不是递归,因为它没有调用自身。 它引用对象的属性。
如果您看到类似这样的内容:
var sf = $.fn.superfish(),
比会有一个问题。 :)
这是一种常用技术,可让您存储对一些深层嵌套属性的引用,并使用它来提高可读性和性能。 克罗克福德的文章与此相关。
// some really deeply nested property
var o = ooo.eee.oo.ah_ah.ting.tang.walla.walla;
// i could type...
ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing = true;
// or just
o.bing = true;
碰巧的是,在这种情况下,深度嵌套的属性是对象本身,但是javascript并不在乎。
这个小提琴演示了您遇到麻烦的确切javascript功能。 这就是javascript的工作方式。 并不是说我会将此功能作为范例基础,但它是可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.