JavaScript -- 闭包

用JS(包括Jquery)有一段时间了,但是对于闭包啥的一直没仔细研究过。闭包是JS中对于初学者而言,一个较难的知识点。

以下是我从网上学习到的,我把它写出来,一方面分享给大家,有啥不对的见解还望指出;另一让面也是记录自己的学习过程。

作用域

要理解闭包,首先是作用域问题。

JS的function中可以读取全局变量,如以下代码:

   var n =  1;
  function f1(){
    alert(n);
  }
  f1(); // 1

但是,无法从function外部获取内部的局部变量,如以下代码:

 function f1(){
   var n = 1;
 }
 alert(n); // error, can't get variable n

有些情况下,我们还是需要从外部获取函数中的局部变量,这式就需要使用闭包。考虑如下代码:

function makeFunc() {
  var name = "Mozilla";
  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();
myFunc();

myFunc()执行后,浏览器将弹出"Mozilla"。

但是,从“常理”来考虑, 

var myFunc = makeFunc();

这句代码将返回displayName这个函数,然而makeFunc()方法已经执行完毕,应当无法获取name变量的值了!但事实相反,很明显,代码不是按照“常理”在运行。

这里,myFunc已经成为一个闭包。

闭包

闭包是一个特殊的函数,这个函数含有上下文环境。

它有两个作用:1,可以读取函数内部的变量;2,让这些捏不变量保持在内存中。 

原文地址:https://www.cnblogs.com/forstudy/p/3252038.html