jQuery插件教程



我一定错过了什么。jQuery插件教程在这里找到,在"命名空间"->"插件方法"一节中,隐藏着下面的插件声明。我在这里没有得到的是方法变量的范围;我的意思是,不应该方法被定义为工具提示中的变量吗?一旦这个匿名函数执行,如果我理解正确的话,方法将超出作用域,因为它被定义为函数中的var。当tooltip被调用时,它是如何引用超出作用域的var方法的?我错过了什么?

(function( $ ){
  var methods = {
    init : function( options ) { // THIS },
    show : function( ) { // IS   },
    hide : function( ) { // GOOD },
    update : function( content ) { // !!! }
  };
  $.fn.tooltip = function( method ) {
    // Method calling logic
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    
  };
})( jQuery );

分配给$.fn.tooltip的函数是闭包[Wikipedia]因此可以访问所有更高的作用域。

当外部函数返回时,methods不会被销毁,因为闭包仍然引用它

它不会超出作用域,因为你的插件仍然保存着对它的引用。在JS中,它们被称为闭包。

这一切都是因为闭包。$.fn.tooltip指向的函数实际上是一个闭包。所以它可以访问method对象

最新更新