[译]Javascript中闭包的各种例子
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单
源地址在此:
https://www.youtube.com/watch?v=PMsVM7rjupU&list=PL6n9fhu94yhUA99nOsJkKXBqokT3MBK0b
在本次的视频中我们将讨论一个简单的Javascript闭包例子.每次我们点击页面上的按钮的时候,我们都想要点击计数增加1.为了达到这个目的,我们有很多中途径.
首先我们可用一个全局变量,然后每次我们点击按钮后,这个变量增加1:这个方法的问题在于,因为clickCount是一个全局变量,那么页面上的任何脚本都有可能不经意间改变这个变量的值
<script type="text/javascript">
var clickCount = 0;
</script>
<input type="button" value="Click Me" onclick="alert(++clickCount);" />
第二个方法是:用一个函数中的本地变量来实现,每次我们点击按钮后,我们呼出函数并且增加其本地变量的值.这个方法的问题在于,无论你点击按钮几次,clickCount的值都不会超过1.
<script type="text/javascript">
function incrementClickCount()
{
var clickCount = 0;
return ++clickCount;
}
</script>
<input type="button" value="Click Me" onclick="alert(incrementClickCount());" />
那么第三种方法就是使用Javascript 闭包了,一个闭包就是在一个外部函数中的内部函数,而且这个内部函数可以用外部函数的变量,自己内部的变量,甚至全局变量.简单的来说,闭包就是函数中的函数,这些外部函数和内部函数可以是有名函数,也可以是匿名函数.在以下的例子中我们用一个在匿名函数中的匿名函数来实现.变量incrementClickCount被赋予返回的自我激活匿名函数值.
<script type="text/javascript">
var incrementClickCount = (function ()
{
var clickCount = 0;
return function ()
{
return ++clickCount;
}
})();
</script>
<input type="button" value="Click Me" onclick="alert(incrementClickCount);" />
在以上的例子中,在alert函数中,我们呼出不带小括号的变量incrementClickCount.这时,当你点击按钮的时候,你会在alert中得到内部匿名函数表达式.那么这个时候,我们想要证明一件事:那就是,外部的自我激活匿名函数仅仅只会运行一次,并且初始化clickCount变量为0,然后返回内部函数表达式.因为内部函数能够获取clickCount变量,那么每次我们点击按钮后,内部函数会增加clickCount变量的值.最重要的一点在于,在页面上,没有其他的脚本可以触及到clickCount变量,要改变clickCount的变量值,唯有通过incrementClickCount函数才能做到,
<script type="text/javascript">
var incrementClickCount = (function ()
{
var clickCount = 0;
return function ()
{
return ++clickCount;
}
})();
</script>
<input type="button" value="Click Me" onclick="alert(incrementClickCount());" />
[译]Javascript中闭包的各种例子的更多相关文章
- 在Javascript中闭包(Closure)
在Javascript中闭包(Closure) 什么是闭包 “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. ...
- javascript中闭包最简单的简绍
javascript中闭包是什么 JavaScript 变量可以是局部变量或全局变量.私有变量可以用到闭包.闭包就是将函数内部和函数外部连接起来的一座桥梁. 函数的闭包使用场景:比如我们想要一个函数来 ...
- 在JavaScript中闭包的作用和简单的用法
在JavaScript中闭包的作用和简单的用法 一.闭包的简介 作用域链:在js中只有函数有作用域的概念,由于函数内能访问函数外部的数据,而函数外部不能访问函数内部的数据,由上述形成一种作用域访问的链 ...
- [译]Javascript中的闭包(closures)
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- 关于javascript中闭包的理解
闭包就是能够读取其他函数内部变量的函数. 在javascript中,只有函数内部的子函数可以读取局部变量,因此,我理解闭包就是定义在一个函数内部的函数. 例子: var f1 = function() ...
- 浅谈JavaScript中闭包
引言 闭包可以说是JavaScript中最有特色的一个地方,很好的理解闭包是更深层次的学习JavaScript的基础.这篇文章我们就来简单的谈下JavaScript下的闭包. 闭包是什么? 闭包是什么 ...
- javascript中闭包的概念
这个是每个前端工程师绕不开的一个问题,网上各种资料很多,整个春节,我仔细研读了红皮经典中关于这一块的注释,加深了对这一块的理解. 有好几个概念需要重申一下.以下都是我的理解: 1. 闭包是javasc ...
- JavaScript 中 闭包 的详解
闭包是什么 在 JavaScript 中,闭包是一个让人很难弄懂的概念.ECMAScript 中给闭包的定义是:闭包,指的是词法表示包括不被计算的变量的函数,也就是说,函数可以使用函数之外定义的变量. ...
- javaScript中闭包的工作原理
一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...
随机推荐
- python之 前端HTML/CSS基础知识学习笔记
1. 文件结构: HTML文件的固定结构: <html> <head>...</head> <body>...</body> </ht ...
- Python collections系列之双向队列
双向队列(deque) 一个线程安全的双向队列 1.创建一个双向队列 import collections d = collections.deque() d.append(') d.appendle ...
- java代码从键盘输入执行次数,数,然后排序
总结:实现从键盘控制执行次数,困惑我很久,直到昨日在提问时,网友说通过循环是肯定可以的所以顿悟了 package com.c2; import java.util.Arrays; import jav ...
- Java-API-Package:javax.annotation
ylbtech-Java-API-Package:javax.annotation 1.返回顶部 1. Package javax.annotation Enum Summary Resource.A ...
- 深入浅出 消息队列 ActiveMQ------增强版
本小节我们将讲解Apache开源下的ActiveMQ,而ActiveMQ是JMS的一个具体实现.JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于 ...
- 侯捷STL学习(12)--STL相关内容hash+tuple
layout: post title: 侯捷STL学习(12) date: 2017-08-01 tag: 侯捷STL --- 第四讲 STL相关的内容 Hash Function 将hash函数封装 ...
- IDEA 运行spingboot时出现Process finished with exit code -1073741819 (0xC0000005)
经过多方查证,问题最终定位在金山词霸2016上,如果开启了金山词霸的取词和划意功能,就会出现此错误,估计是冲突吧. 解决办法:关掉金山词霸,或者把金山词霸的取词和划意功能关掉.经过尝试,发现只要在ID ...
- bash姿势-没有管道符执行结果相同于管道符
听起来比较别口: 直接看代码: shell如下: [root@sevck_linux ~]# </etc/passwd grep root root:x:::root:/root:/bin/ba ...
- python正则以及collections模块
正则 一.认识模块 什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.p ...
- struts1.2里的ActionMessages的使用
转自:https://blog.csdn.net/oswin_jiang/article/details/4582187