码迷,mamicode.com
首页 > 其他好文 > 详细

闭包的理解

时间:2017-12-30 15:52:35      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:cti   fine   个人   return   变量   log   讲解   例子   post   

一、闭包是什么

查阅了些许文档,个人理解如下:

  闭包是为了读取函数内部变量而发明的。

1.局部变量和全局变量的理解
var y=魔法小樱;
function f1(){
  var x=漩涡鸣人;//这里我们声明了一个局部变量
}
console.log(y);//输出结果是   魔法小樱;
console.log(x);//输出结果是   x is not defined;
//说明了什么问题呢?说明y是全局变量,都可以访问到;x是局部变量,只有f1可以访问到;如果我们想在f1的外面访问到x变量,怎么办呢?这就需要用到闭包的知识了

2.链式作用域
正规解释:子对象会一级一级地向上寻找所有父对象的变量。
通俗理解:你可以想象古时候的王权,在皇宫里,最里面是皇上,外面一层是贵族官员,最外面是老百姓。肯定是里面的皇帝最牛逼啊,想怎么搞就怎么搞,可以获得所有权限和信息。那如果外面的小老百姓想知道皇宫发生了什么事情,怎么办呢?就要通过皇宫里的人来获得信息咯。

3.闭包讲解啦
请看例子:
function f1(){
    var s=你特么打我试试?;
function f2(){ 
console.log(s);
}//我就是一个方法,一个能够获得s的方法,相当于皇宫里面的太监    
}
console.log(s);//获取不到s的啦这样;

----------------------------------------------
function f1(){
    var s=你特么打我试试?;
function f2(){ 
console.log(s);
}   
return f2; 
}
console.log(f1()());//这样才能获取s的值

-----------------------------------------------
   function f1(){
    var s=你特么打我试试?;
function f2(){ 
console.log(s);
}   
return f2(); 
}
console.log(f1());//或者这样才能获取s的值

//那f2和f2()的区别是什么呢?简单的说,f2表示f2这个函数本身,f2加了括号后,就是执行这个函数。你可以自己写个函数,console.log一下看看。

所以大牛们为了方便,往往写成以下形式:
function f1(){
var s=你特么打我试试?;
return function f2(){console.log(s)};//这样返回了f2这个函数体本身,没有执行
}
f1()();这样就Ok了;

 

闭包的理解

标签:cti   fine   个人   return   变量   log   讲解   例子   post   

原文地址:https://www.cnblogs.com/windsaygo/p/8149778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!