<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所有实现 ...
随机推荐
- eclipse开发scrapy爬虫工程,附爬虫临门级教程
写在前面 自学爬虫入门之后感觉应该将自己的学习过程整理一下,也为了留个纪念吧. scrapy环境的配置还请自行百度,其实也不难(仅针对windows系统,centos配置了两天,直到现在都没整明白) ...
- 排序算法(冒泡、选择)-python代码展示
冒泡排序: def bubble_sort(list): for i in range(len(list) - 1): # 这个循环负责设置冒泡排序进行的次数 for j in range(len(l ...
- Python 编码encode()、 解码decode()问题
乱码这种东西,时不时出现.本来开开心心想着我要学习啦,然后兴高采烈打开了比火星文还火星文的字符-- 没事,我可以搞定这堆鬼画符. 先来讲一下为什么有乱码这种东西的存在 故事是这样滴: 字符串是Pyth ...
- 2018/7/31-zznu-oj-问题 F: 手机密码--【裸dfs+for循环即可!——据说三个小时内只有两个人读完了题意并轻松AC了】
问题 F: 手机密码 时间限制: 1 Sec 内存限制: 128 MB提交: 41 解决: 23[提交] [状态] [讨论版] [命题人:admin] 题目描述 手机安全问题是大家经常关心的一个问 ...
- Please, commit your changes or stash them before you can merge. Aborting
1.stash 通常遇到这个问题,你可以直接commit你的修改:但我这次不想这样. 看看git stash是如何做的. git stash git pull git stash pop ...
- Mysql 语法豆知识
https://www.cnblogs.com/chentianwei/p/8093748.html mysql增加了大量语法,以前没有接触过.比如 create function begin..en ...
- ZooKeeper介绍(转载)
关于ZooKeeper,下面引用了一片文章,原文地址是:http://www.cnblogs.com/wuxl360/p/5817471.html 一.分布式协调技术 在给大家介绍ZooKeeper之 ...
- 前端知识体系:JavaScript基础-作用域和闭包-JavaScript的作用域和作用域链
JavaScript的作用域和作用域链 作用域: 变量的作用域无非两种:全局作用域和局部作用域 全局作用域: 最外层函数定义的变量拥有全局作用域.即对任何内部函数来说都是可以访问的. <scri ...
- 遍历windows窗口
原文 1. GetDesktopWindow GetNextWindow HWND hAll = ::GetDesktopWindow(); HWND hCurrent = ::GetNextWind ...
- app连接线上数据库进行本地接口测试
1.将开发环境下数据库配置改为生产环境下的数据库连接 2.备份生产环境下的数据库数据以及结构,使用Postman请求开发(本地)环境下的接口 3.打开手机上安装的线上app改动接口时查看app是否发生 ...