我的javascript闭包是否写得正确?

时间:2012-01-05 01:19:03

标签: javascript jquery closures

我在jqgrid(jquery网格)中使用以下函数闭包来保留在名为' retainChanges'的变量中进行分页时的编辑更改 - 这看起来不错;我打破了javascript中的任何好习惯; 代码工作正常只是想确保我不介绍将来可能破坏的功能

 (function($){
      var retainedChanges;
      retainedChanges = new Array();
      $.retainChangesOnPaging = function(){
        var changedCells = $('#grid').jqGrid('getChangedCells');
        // loop over changedCells array, removing duplicates if you want to...
          return  retainedChanges.push(/* this is inside the loop; push current value to array*/);
         ....
      }
       $.getRetainedChanges = function(){
         return retainedChanges;
       }
    })(jQuery);

3 个答案:

答案 0 :(得分:2)

这很好用,虽然你应该接受jQuery作为参数:

(function($){

这样,即使$符号用于闭包之外的其他内容,它也不会影响闭包内的代码。

另外两件事:

1)您应该声明并将变量分配到一起,并使用[]代替new Array()
2)您在此处缺少$符号:('#grid')


有关完整的纲要,请查看以下内容:

(function($){

  var retainedChanges = [];

  $.retainChangesOnPaging = function(){
    var changedCells = $('#grid').jqGrid('getChangedCells');
    // loop over changedCells array, removing duplicates if you want to...
    return  retainedChanges.push(/* this is inside the loop; push current value to array*/);
    ....
  }

  $.getRetainedChanges = function(){
    return retainedChanges;
  }

})(jQuery);

答案 1 :(得分:0)

您正在将jQuery传递给没有参数的函数,并且从不使用传入的jQuery对象。您可能意味着:

(function($){

除此之外它看起来很好。

答案 2 :(得分:0)

您可以改进几件事:

1)您将jQuery传递给该函数,但不要使用它(如果已定义,则使用全局对象$)。将代码修改为接受一个名为$ 的参数:

(function($){

2)您可以缩短retainedChanges声明

var retainedChanges = new Array();

3)如果您正在尝试编写jQuery插件,请按照以下教程进行操作:jQuery: Plugins/Authoring

如果没有,那么可能使用与jQuery不同的全局对象?