简友广场

javascript闭包

2018-12-19  本文已影响112人  前端来入坑

闭包是什么

说的具体点,引用下面参考博客中的解释:即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。

闭包的词法作用域

var Counter = (function() {
  var privateCounter = 0;
  function changeBy(val) {
    privateCounter += val;
  }
  return {
    increment: function() {
      changeBy(1);
    },
    decrement: function() {
      changeBy(-1);
    },
    value: function() {
      return privateCounter;
    }
  }   
})();

console.log(Counter.value()); /* logs 0 */
Counter.increment();
Counter.increment();
console.log(Counter.value()); /* logs 2 */
Counter.decrement();
console.log(Counter.value()); /* logs 1 */

实用的闭包

在写js的时候都会用这样一个匿名自执行函数包裹起来(function(){ })(),就是为了让里面定义的变量成为局部变量,不影响全局的变量。避免使用过多的闭包,可以用let关键词。

js面向对象之组合继承
js面向对象的方法
JavaScript多重继承
ES6的继承
面向对象学习网站

性能考量

如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响。

MDN官网https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

参考https://www.cnblogs.com/yunfeifei/p/4019504.html

上一篇 下一篇

猜你喜欢

热点阅读