[译]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中闭包的工作原理
一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...
随机推荐
- 【java规则引擎】之Drools引擎中模拟ReteooStatefulSession内部设计结构
该片文章只是抽取drools中java代码实现的一些代码结构,帮助我们理解drools是如何实现rete算法的. 该部分只是抽取ReteooStatefulSession工作过程中的代码架构 利用了多 ...
- 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie
题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1≤r1<l2≤r2≤N,x⨁yx\bigoplus yx⨁y 表示 ...
- 【LeetCode】028. Implement strStr()
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...
- 利用PIL添加水印
转:http://www.jb51.net/article/66542.htm
- redis设置为null问题
查看源码后发现,redis没有删除方法,本想给他设置为null,但是redis报错,所有仔细想了一下,发现redis提供了一个时间限制方法,所有可以让redis的时间限制为1s,就想当于删除redis ...
- HIVE-执行distribute by时报错的解决过程---之如何分析hive执行的错误并解决
在执行一条HIVE语句的时候报了以下错误,重新检查了所有步骤,重启所有服务,发现没有问题. 但发现一个有趣的事情 1,select sno,sname,sex,sage,sdept from stud ...
- bzoj 3028 食物——生成函数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3028 把式子写出来,化一化,变成 x / ((1-x)^4) ,变成几个 sigma 相乘的 ...
- git ssh登录
.ssh下创建config文件 其内容: Host ipIdentityFile ~/.ssh/私钥文件名Port 22User git服务器的账号,不是git账号名(私钥文件名才是git账号名) 注 ...
- Java-API-POI-Excel:SXSSFWorkbook Documentation
ylbtech-Java-API-POI-Excel:SXSSFWorkbook Documentation 1.返回顶部 1. org.apache.poi.xssf.streaming Class ...
- 杂项-Grunt:grunt build 打包和常见错误
ylbtech-杂项-Grunt:grunt build 打包和常见错误 1. 安装.打包返回顶部 1. npm WARN deprecated coffee-script@: CoffeeScrip ...