<JavaScript> 匿名函数和闭包的区别
匿名函数:没有名字的函数;并没有牵扯到应用其他函数的变量问题。仅仅是没有名字。
定义方式:
1,var A = function(){ };
2, (function (x,y){ })(2,3);
3, function() { };
闭包:A函数中嵌套着B函数,B程序中有用到A的变量,当外部函数C调用函数A时,虽然A已经执行完毕,理论上函数执行完毕,它就要被弹出栈,但是由于B要用到A,所以A的变量被保存到内存中不被销毁,我们称函数B是闭包。
代码实例:
在《js高级程序设计中》,有段代码:
function A(){
var array1=[ ];
for(var i=0;i<5;i++){
array1[i]=function (){
return i;
}}
for(j=0;j<5;j++){
console.log( array1 [j] ( ));}
} //5 5 5 5 5
因为此时标红处的代码不仅仅是匿名函数了,它应用了A()函数的变量i,所以它是闭包,此时形成一个作用域链,当所有的数组函数array1[i]()循环结束后,最后i也变成了5,数组函数沿着作用域链,在A()执行环境找到了i=5,所以返回5个5;
要想返回0 1 2 3 4就不要使用闭包:
function A(){
var array1=[ ];
for(var i=0;i<5;i++){
array1[i]=function(num){
return function(){
return num;}}(i);
}
for(var j=0;j<5;j++){
console.log(array1[j]());
}} // 0 1 2 3 4
此时返回的任然是数组函数,如果将标红代码改成 return i,则返回的是数组是值,不是函数。
我认为闭包和匿名函数的区别是,匿名函数没有在别的函数执行完毕后,还在使用别人的变量,也就是,它的作用域链中没有已经执行完毕的函数执行环境。
<JavaScript> 匿名函数和闭包的区别的更多相关文章
- 第一百一十节,JavaScript匿名函数和闭包
JavaScript匿名函数和闭包 学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂 ...
- [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)【转】
(function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有 ...
- 浅谈JavaScript匿名函数与闭包
一. 匿名函数 //普通函数定义: //单独的匿名函数是无法运行的.就算运行了,也无法调用,因为没有名称. 如: function(){ alert('123'); ...
- 深入理解javascript 匿名函数和闭包
代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其 ...
- Javascript 匿名函数与闭包
请见如下一个闭包示例: color = "red"; var obj = { color: "blue", getColor: function () { fu ...
- [从jQuery看JavaScript]-匿名函数与闭包
jQuery片段: (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我 ...
- 详谈JavaScript 匿名函数及闭包
1.匿名函数函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这 ...
- javascript 匿名函数及闭包----转载
网上很多解释,我无法理解,我想知道原理...这篇文章应该可以透彻一点Query片段:view plaincopy to clipboardprint? (function(){ //这里忽略 ...
- [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)
http://blog.csdn.net/natineprince/article/details/4759533 jQuery片段: (function(){ //这里忽略jQuery所有实现 ...
随机推荐
- h5 安卓/IOS长按图片、文字禁止选中或弹出系统菜单 的解决方法
最近在做IM的语音功能,发现当长按录音的时候手机会弹出来系统菜单, IOS下bug形式:1)长按的标签设置为css background的形式:不会弹出菜单: 2)但是当设置为img时,系统默认识别为 ...
- 12.自定义v-过渡动画前缀
代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- Wireless Network(并查集)
POJ - 2236 #include<iostream> #include<algorithm> #include<cstring> #include<cm ...
- PHP中将二维数组 转换成字符串
function arr_to_str($arr) { $t ='' ; foreach ($arr as $v) { $v = join(",",$v); // 可以用implo ...
- PHP程序员的技术成长规划(转载)
按照了解的很多PHP/LNMP程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定 ...
- 解析.conf配置文件
解析.conf配置文件 解析.conf配置文件 解析.conf配置文件
- 大数据之路week03--day05(线程 II)
今天,咱们就把线程给完完全全的结束掉,但是不是说,就已经覆盖了全部的知识点,可以说是线程的常见的问题及所含知识基本都包含. 1.多线程(理解) (1)JDK5以后的针对线程的锁定操作和释放操作 Loc ...
- 0011SpringBoot的@EnableWebMvc全面接管SpringMVC的自动配置(源码)
所谓的@EnableWebMvc全面接管SpringMVC的自动配置,是指@EnableWebMvc注解会使SpringMVC的自动配置失效,原理如下: 1.查看@EnableWebMvc的源码,如下 ...
- JAVA遇见HTML——JSP篇(JSP指令与动作元素)
- springAop Schedule,注解annotation 实现任务监控
我们有很多定时任务在任务工程中执行,但是如果我们不加以监控,很有可能定时任务死掉或者卡住我们都不知道. 所以需要做一个任务监控.监控任务当前执行的状态. 还是那样,先让定时任务启动起来,当前我们使用的 ...