如何在jQuery中正确调整变量范围?

saf*_*opy 1 javascript jquery scope

我正在研究一个jQuery插件,但是在使我的变量适当缩放时遇到了一些麻烦.这是我的代码中的一个例子:

(function($) {

$.fn.ksana = function(userOptions) {
    var o = $.extend({}, $.fn.ksana.defaultOptions, userOptions);

    return this.each(function() {
        alert(rotate()); // o is not defined
    });
};

function rotate() {
    return Math.round(o.negRot + (Math.random() * (o.posRot - o.negRot)));
};

$.fn.ksana.defaultOptions = {
    negRot: -20,
    posRot: 20
};

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

我试图让私有函数旋转以便能够看到o变量,但它只是保持警告'o未定义'.我不确定我做错了什么.

CMS*_*CMS 6

o变量的局部范围内$.fn.ksana的功能,为了使rotate到达它,您应该:

  • 只需将o变量作为参数传递给它.
  • 在其中定义该功能ksana.
  • o在外部范围内定义.

IMO,将其作为参数传递就足够了:

(function($) {
  $.fn.ksana = function(userOptions) {
    var o = $.extend({}, $.fn.ksana.defaultOptions, userOptions);

    return this.each(function() {
        alert(rotate(o)); // pass o
    });
  };

  function rotate(o) { // use passed object
    return Math.round(o.negRot + (Math.random() * (o.posRot - o.negRot)));
  }
//...
})(jQuery);
Run Code Online (Sandbox Code Playgroud)