在我们开发中,也经常使用到闭包,但当有人问什么是闭包,就会可能说不上来。那就谈谈一些基本的:

一.理解闭包的概念,

简单说当function里嵌套function时,内部的function可以访问外部function里的变量,而外部的function不能直接访问内部的function的变量,当你return的是内部function时,就是一个闭包。看下面例子说明:

1.嵌套的函数可以访问在其外部声明的变量。

 function fn(x) {
var z = 1;
function fnc(y) {
alert(x + y + (++z)); //alert为7
}
fnc(2);
}
fn(3)
fnc既可以访问fn的参数x,也能访问到fn的变量z,但这不是闭包。

2.外部声明的变量下获取到局部变量中的变量


function fn(x) {
var z = 1;
return function (y) {
alert(x + y + (++z));//alert为7
}
}
var bar = fn(2); // 现在是一个闭包
bar(3);

其实理解起闭包的概念真的费敬,个人理解就是:闭包就是能够读取其他函数内部变量的函数,是将函数内部和函数外部连接起来的桥梁。

二。闭包好处与坏处

好处:

1.保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突,

2.匿名自执行函数可以减少内存消耗,在匿名自执行函数传入一个闭包函数,匿名自执行函数执行完立即销毁,可以减小内存消耗。

坏处:被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏。

了解闭包更详细,请参考链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

什么是javascript闭包?的更多相关文章

  1. 《Web 前端面试指南》1、JavaScript 闭包深入浅出

    闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...

  2. JavaScript 闭包深入浅出

    闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...

  3. JavaScript闭包(Closure)

    JavaScript闭包(Closure) 本文收集了多本书里对JavaScript闭包(Closure)的解释,或许会对理解闭包有一定帮助. <你不知道的JavsScript> Java ...

  4. Javascript闭包和C#匿名函数对比分析

    C#中引入匿名函数,多少都是受到Javascript的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ...

  5. javascript闭包理解

    //闭包理解一 function superFun(){ var _super_a='a'; function subfuc(){ console.log(_super_a); } return su ...

  6. Javascript闭包深入解析及实现方法

    1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点:1. 作为一个函数变量的一个引用,当函数返回时 ...

  7. javascript闭包和作用域链

    最近在学习前端知识,看到javascript闭包这里总是云里雾里.于是翻阅了好多资料记录下来本人对闭包的理解. 首先,什么是闭包?看了各位大牛的定义和描述各式各样,我个人认为最容易一种说法: 外部函数 ...

  8. JavaScript闭包深入解析

    for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 ); } --上面这段 ...

  9. JavaScript 闭包系列二(匿名函数及函数的闭包)

    一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) {     return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...

  10. JavaScript闭包模型

      JavaScript闭包模型 -----  [原创翻译]2016-09-01  09:32:22 < 一>  闭包并不神秘 本文利用JavaScript代码来阐述闭包,目的是为了使普通 ...

随机推荐

  1. 牛客练习赛29 B 列队

    [题解] 把某一行或某一列有4个1的都统计出来,然后首尾接上尽量长的,注意首尾不能选上同一个矩阵,要维护前缀.后缀1最大值和次大值. 还要注意维护矩阵内连续1的长度,因为可能有 0 0 0 0 这种情 ...

  2. 九度oj 题目1060:完数VS盈数

    题目1060:完数VS盈数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6461 解决:2426 题目描述: 一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1.则称其 ...

  3. 防火墙内设置FileZilla Server注意事项

    开启了Windows下的防火墙,如何设置FileZilla Server 相关选项,能在服务器端只开启21,23端口就可以正常连接使用 方法/步骤   1.       开启windows防火墙,同时 ...

  4. input range音乐进度条

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. Toast自定义

    Toast toast=new Toast(MainActivity.this); toast.setView(getLayoutInflater().inflate(R.layout.toast,n ...

  6. 使用XML定义组件样式

    <TextView android:layout_width="match_parent" android:layout_height="wrap_content& ...

  7. 学习日常笔记<day09>Http协议

    1 Http协议入门 1.1 什么是http协议 http协议: 对浏览器客户端 和  服务器端 之间数据传输的格式规范 1.2 查看http协议的工具 1)使用火狐的firebug插件(右键-> ...

  8. linux 用 rsync 快速删除大量小文件

    假设我们在目录 /tmp/to_delete 下有很多小文件 a1 a2 a3 f1 f2 f3 现在我们想快速的删除f 开头的文件. 如果文件量大,用rm 可能会失败,而且会很慢, 所以用rsync ...

  9. mysql建表语句key的含义

    CREATE TABLE `admin_role` (  `adminSet_id` varchar(32) NOT NULL,  `roleSet_id` varchar(32) NOT NULL, ...

  10. Ubuntu如何开启root账户登录

    1 首先设置root密码,利用现有管理员帐户登陆Ubuntu,在终端执行命令:sudo passwd root,接着输入密码和root密码,重复密码.这样就有了可用的root用户.   2 打开一个终 ...