Javascript闭包(狗血剧情,通俗易懂)
我们先来看一个闭包的函数:
function a() {
var i = 0;
function b() {
alert(++i);
}
return b;
}
var c = a();
c();
c();
c();
等价于
function 男1() {
var 孩子 = 0;
function 女1() {
alert(++孩子);
}
return 女1;
}
var 男2 = 男1();
男2();
男2();
男2();
那么接下来我们分析分析闭包这个狗血的剧情。
javascript规则:如果只是两个人互相引用,那么GC(婚姻登记处)就回收这个两个人(PS:省的他们乱搞!)。
闭包:就是三个人,你中有我,我中有他,他中有你,这么复杂的关系,GC就懒得烦管了。
剧情:
1、男1的心里(Scope chain 作用域)中有女1,女1的肚子(scope chani 作用域上的arguments )有孩子 男1和女1关系
PS:如果只是男1和女1,那么就符合了javascript的规则,直接奔向幸福生活
2、万恶的男2登场,男2也喜欢女1,并告诉男1你把她让给我吧,男1真的让给了男2
PS:强烈谴责男2和男1,最大的问题是女1已经有男1的小孩了
3、男2调用了女1,居然生了男1的孩子
PS:以上剧情真心狗血,因此闭包,不是特殊环境请勿使用,呵呵~~
Javascript闭包(狗血剧情,通俗易懂)的更多相关文章
- 关于javascript闭包的最通俗易懂的理解
这两天在研究闭包,网上一通找,有牛人写的帖子,有普通人写的帖子,但是大多没戳中本小白所纠结的点,而且大多插入了立即执行函数,其实根本不需要的,反而让人产生了误解.这里我用我的方式讲解一下闭包. 1.目 ...
- javascript闭包—围观大神如何解释闭包
闭包的概念已经出来很长时间了,网上资源一大把,本着拿来主意的方法来看看. 这一篇文章 学习Javascript闭包(Closure) 是大神阮一峰的博文,作者循序渐进,讲的很透彻.下面一一剖析. 1. ...
- 《Web 前端面试指南》1、JavaScript 闭包深入浅出
闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...
- JavaScript 闭包深入浅出
闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...
- JavaScript闭包(Closure)
JavaScript闭包(Closure) 本文收集了多本书里对JavaScript闭包(Closure)的解释,或许会对理解闭包有一定帮助. <你不知道的JavsScript> Java ...
- Javascript闭包和C#匿名函数对比分析
C#中引入匿名函数,多少都是受到Javascript的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ...
- javascript闭包理解
//闭包理解一 function superFun(){ var _super_a='a'; function subfuc(){ console.log(_super_a); } return su ...
- Javascript闭包深入解析及实现方法
1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点:1. 作为一个函数变量的一个引用,当函数返回时 ...
- javascript闭包和作用域链
最近在学习前端知识,看到javascript闭包这里总是云里雾里.于是翻阅了好多资料记录下来本人对闭包的理解. 首先,什么是闭包?看了各位大牛的定义和描述各式各样,我个人认为最容易一种说法: 外部函数 ...
- JavaScript闭包深入解析
for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 ); } --上面这段 ...
随机推荐
- Centos6.5下的Hadoop安装
开始进行云计算部分的学习,为了存档,写下现在进行过的步骤 需要用到的主要版本: 虚拟机:Vmware Workstation pro 12.5 Linux系统:CentOS6.4 64bit jdk版 ...
- xml和json的区别
本文转自SanMaoSpace的博客 链接地址如下:http://www.cnblogs.com/SanMaoSpace/p/3139186.html 1.定义介绍 (1).XML定义扩展标记语言 ( ...
- JavaEE 启示录
1. 对象在实例化之前(也就是没有new出来),就调用它的方法,那么可能会遇到null错误. 2. Eclipse默认会把Web项目发布到workspace\.metadata\.plugins\or ...
- windows socket
//服务器 // winsvr.cpp : Defines the entry point for the console application. // #include "stdafx. ...
- onthink 数据库连接配置
define('UC_DB_DSN', 'mysql://root:@127.0.0.1:3306/app'); // 数据库连接,使用Model方式调用API必须配置此项 /* 数据库配置 */ ' ...
- JavaScipt 数据交互
标准的w3c直接提供了XMLHttpRequest方法,我们主要站在设计的角度来理解,如何设计出低耦合高内聚的代码jquery对Ajax的处理主要体现在对浏览器兼容,数据的处理过滤以及各种事件的封装上 ...
- maven添加本地jar包
今天遇到一个mavan仓库中没有的jar包, 故只能添加本地jar包, 花了不少时间找资料,终于OK.故在此记录. 1. 第一次,在网上看到说可以用<systemPath> 解决, 如下: ...
- c语言迷宫游戏的实现
// // main.c // 迷宫游戏代码实现 // #include <stdio.h> #define ROW 6 //宏定义行 #define COL 6 //宏定义列 /** * ...
- Linux Shell 学习总结
1. -bash: ./dd.sh: /bin/bash^M: bad interpreter: 没有那个文件或目录 当出现上面这问题的时候,首先看你的.profile 里面是否配置对了,一般配置为: ...
- category - junit用例分组执行
一.category 和 testSuite的比较 (1)testSuite是类级分组(xx.class) (2)category是用例级分组(@Test) (3)category是testSuite ...