开发者社区> 问答> 正文

js和jquery利用闭包做组件:报错

自己写一个插件,单独调用没有问题,但是有2个元素进行调用的时候,内部参数就会影响,知道闭包可以解决,但是不会写.求告知js组件的闭包怎么写,jquery组件的闭包怎么写.只要外面的模式就可以,里面的方法自己实现.

展开
收起
kun坤 2020-06-09 23:21:46 689 0
1 条回答
写回答
取消 提交回答
  • 把属性写到对象里,把方法写到对象里。
    ######你的插件是什么写的,如果是写成单例那就有影响,如果是不同的元素调用是就new一个对象的话,那就不会相互影响。js方法就是也是一种闭包,里边的影响不到外边的。。。其实我还不太明白你想要到达什么效果。。######jquery 的闭包写法:   !function(w){  //.....  }(window);你问题描述的不够清晰,不好针对性的给出详细答案,最好有贴出部分代码。######

    闭包是伴随着作用域而生的,js中只有全局作用域和函数作用域。所以,闭包一般和函数相关。确切的说,是函数中的函数。举几个例子:

    example1:

    function log() {
      var logs = [];
      return function(data, end){
        logs.push(data);
        end = end || false;
        if(end){
          var val = logs.join('##');
          console.log(val);
          logs = [];
        }
      }
    }
    
    var myLog = log();
    myLog('a=1');
    myLog('b=2');
    myLog('c=3', true);



    定义一个log函数,它会“缓存”一个名为“logs”的数组,然后返回另外一个函数。调用的时候先通过
    var myLog = log()
    获得这个内部函数,然后调用这个内部函数就可以了,这样“logs”的作用域就被牢牢的锁死了,只有myLog内部才能访问它。也可以变通一下。

    example2:

    var myLog = (function() {
      var logs = [];
      return function(data, end){
        logs.push(data);
        end = end || false;
        if(end){
          var val = logs.join('##');
          console.log(val);
          logs = [];
        }
      }
    })();
    
    myLog('a=1');
    myLog('b=2');
    myLog('c=3', true);



    和第一个例子很像,区别是我在定义的时候直接返回这个内部函数。效果是一样的。再来一个例子。看看闭包是如何hold住数据的。

    example3:

    function plus(a) {
      return function(b) {
        return a + b;
      }
    }
    
    var add5 = plus(5);
    console.log(add5(1));
    console.log(add5(2));
    console.log(add5(3));
    console.log(add5(4));
    console.log(add5(5));



    add5在定义的时候就已经把“5”这个变量永远锁住了。不知道这样你能够理解一些了么?

    上两个例子中的“logs”也好,plus函数的参数“a”也好,在内部函数中称作“自由变量”,也就是当内部函数执行的时候,并不能在自身的作用域内发现这个变量,即这个变量,既不来自内部函数的参数,也不是函数内部声明的,所以函数执行时会到“定义这个函数的”作用域内查找。很幸运,我们的例子中,向上查找一次就找到了。


    ######

    调用的时候$scope.meeting = new Meeting();

    不知道这样算不算闭包呢?

    2020-06-09 23:21:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript异步编程 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载