闭包

2018-02-05  本文已影响0人  zy懒人漫游

作用域

理解闭包之前我们要弄清楚js的变量作用域,变量作用域就2种,

Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。

  var a=1;
 function fn(){
   console.log(a);
 }
 fn(); //1

函数外部不能读取函数内部的局部变量

 function fn(){
   var a=1;
 }
  console.log(a);//报错

注意:函数内部声明变量的时候,一定要使用var声明。如果不用的话,实际上声明的是一个全局变量。如下

 function fn(){
   var a=1;
 }
  fn()
  console.log(a);//1

外部读取局部变量

当有时候我们需要从外部得到函数内部的变量时,这个时候我们可以在函数内部再定义一个函数

function fn1(){
  a=1;

  function fn2(){
     console.log(a); // 1
    }
 }

function fn1(){
  a=1;
  function fn2(){
    console.log(a);
  }
  return fn2;
}
var result=fn1();
result(); // 1

闭包的概念

例子
这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
上一篇下一篇

猜你喜欢

热点阅读