美文网首页
javascript学习日记之闭包

javascript学习日记之闭包

作者: XIAOINNE | 来源:发表于2016-11-28 18:39 被阅读8次

闭包是学习javascript重点,最初接触到闭包时感觉到有点困难。当然学习闭包也是非常重要一个环节。

  • 词法作用域
  • 闭包
  • 闭包模拟私有方法

1.词法作用域
每个函数在创建时都会有个自己的环境,也就是词法作用域。比如:

function f1 () {
   var a = 1;
   f2();
}
function f2 {
    return  a;
}

从上述代码看出,我们分别创建两个函数f1和f2
f1函数中 定义个局部变量a和 执行f2函数 。f2函数里简单的返回a的值 。

f1(); //a  is not defined

因为f1和f2函数只能访问自身作用域和全局作用域里的内容。所以f1函数 并不能访问f2函数里的内容 也就是说f1和f2函数不存在共享词法作用域。

2.闭包
那么如何访问到其他作用域里的内容呢?
这时候就用闭包了
闭包是指那些能够访问独立(自由)变量的函数 (变量在本地使用,但定义在一个封闭的作用域中)
最常见创建闭包就是函数内部再创建一个函数,比如

function fn1() {
  var name = "zhanglei";
  function fn2() {
    alert(name);
  }
  return fn2
}
var a = fn1();
a();

3.闭包模拟私有方法
JavaScript 可以使用闭包模拟私有方法。私有方法不仅仅有利于限制对代码的访问:还提供了管理全局命名空间的强大能力,避免非核心的方法弄乱了代码的公共接口部分

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 */

这里有个细节就是利用了全局命名空间,以避免非核心的方法弄乱了代码的公共接口部分。
首先创建了一个自调函数 定义了一个私有变量和一个私有方法 然后返回了 三个公共函数 因为这三个公共函数是共享同一个环境的闭包。所以都可以访问 privateCounter 变量和 changeBy 函数。

相关文章

  • JavaScript----闭包

    javascript之闭包 闭包的概念     闭包(closure)是 JavaScript 的一种语法特性。 ...

  • javascript学习日记之闭包

    闭包是学习javascript重点,最初接触到闭包时感觉到有点困难。当然学习闭包也是非常重要一个环节。 词法作用域...

  • 闭包

    学习Javascript闭包(Closure)

  • JavaScript深入理解-闭包(Closure)

    推荐文章:学习Javascript闭包(Closure)- 阮一峰javascript深入理解-从作用域链理解闭包...

  • JavaScript学习之闭包

    参考 阮一峰 廖雪峰 闭包 变量作用域 限定变量的使用范围,就像是对于一个SAP的产品不同的角色有不同的使用权限;...

  • JavaScript学习之闭包

    闭包的概念 举个例子: 闭包的好处 可以读取函数内部的变量 可以让变量是始终保存在内存中,比如:单例 var Si...

  • 笔记:JavaScript闭包

    本文摘录及参考自:1. 学习Javascript闭包(Closure)2. 闭包的秘密3. JavaScript ...

  • avaScript 闭包的理解

    JavaScript 学习笔记之闭包 这篇文章是我学习闭包的笔记与总结,后面会有一些例子,结合画图的形式来理解,什...

  • 闭包

    原文出处 JavaScript深入之闭包 定义 MDN 对闭包的定义为: 闭包是指那些能够访问自由变量的函数。 那...

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

网友评论

      本文标题:javascript学习日记之闭包

      本文链接:https://www.haomeiwen.com/subject/orwopttx.html