js 的匿名函数

var sum = function(x,y){alert(x+y);
};

像上面这种,function后面没有函数名的函数就叫做匿名函数。以上是将匿名函数赋值给了sum变量。

还有一种写法:

alert((function(x,y){return x+y;
})(2,3));
//结果为5

 当单独运行一个匿名函数时会报错,比如:

function() {console.log(123)
}

 

块级作用域:

在匿名函数中的变量属于块级作用域,

(function(){var la="你好哦";})();
console.log(la);//报错---la is not defined

 匿名函数的作用:

1、通过匿名函数可以实现闭包。闭包是可以访问在函数作用域内定义的变量的函数。若要创建一个闭包,往往都需要用到匿名函数。
2、模拟块级作用域,减少全局变量。执行完匿名函数,存储在内存中相对应的变量会被销毁,从而节省内存。再者,在大型多人开发的项目中,使用块级作用域,会大大降低命名冲突的问题,从而避免产生灾难性的后果。自此开发者再也不必担心搞乱全局作用域了。
https://blog.csdn.net/conatic/article/details/61627183

 闭包:

我们有时候需要得到函数内的局部变量。但是正常情况下,这是办不到的,只有通过在函数的内部,再定义一个函数,这就形成了闭包。

function f1(){//f1不可以访问f2内部的局部变量var n=999;function f2(){//f2可以访问f1内的局部变量alert(n); // 999
  }}

  函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

 

既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗

function f1(){var n=999;function f2(){alert(n); }return f2;}var result=f1();result(); // 999

 

 

使用闭包需要注意的问题:

由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

 

http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

 

转载于:https://www.cnblogs.com/150536FBB/p/11428798.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科目三并不难 盘点科目三技巧

科目三难不难?相信很多学员都会有这个疑问,其实,找驾校网可以负责任的告诉你,只要掌握了科目三考试技巧,通过科目三的机会将会大大增加。下面就请看科目三技巧,帮你轻松通过驾校科目三考试。   科目三考试…

健康肾脏有“六怕”

补肾”一词大家并不陌生,甚至有人呢拿它当成功课来做。但其实,保护肾脏是日常生活中的小习惯就可以做到的,盲目的补肾则可能会伤肾!今天我们就来看看,肾脏都有哪“六怕”。 肾脏一怕:只重补肾,忽视肾脏健…

【转载】矩阵求导、几种重要的矩阵及常用的矩阵求导公式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/daaikuaichuan/article/details/80620518 一、矩阵求导 一般来讲,我们约定x(x1,x2,...xN)…

AI 人工智能学习路线

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 相关视频资料下载见:https://blog.csdn.net/qwxwaty/article/details/80800701 阶段一、人工智能基础 - 高等数…

mysql多条数据合并一条之后取出重复值

mysql多条数据合并一条用,逗号分隔 GROUP_CONCAT(equipment_type) as type mysql多条数据合并一条用,逗号分隔并且去除重复值 GROUP_CONCAT(distinct equipment_type) as type 这里的distinct必须放在开头 转载于:https://www.cnblogs.com/zjj1990/p/11452951.html

人生一世 什么真正的才是你的?

近日看了一篇文章:“人生一世、什么是你的?”让人思绪起伏。是啊,人生一世、到底什么才是你的,临近古稀、这个问题让人深思回首: 初恋是你的吗?那是你们什么都还不成熟,只是一时的感情冲动,有很多的不现…

一张图看懂AI、机器学习、深度学习的关系

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 AI(人工智能)是未来,是科幻小说,是我们日常生活的一部分。所有论断都是正确的&#xff0…

数据结构与算法绪论

基本概念和术语 数据数据是信息的载体,是描述客观事物属性的数,字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。 数据元素数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成…

学习不能速成

学习是一个过程,在幼儿阶段,如果爸妈不求速成,让孩子能愉快地经历各种建立新知的方式,打好基础、享受学习,孩子才能终身保有学习的热情。 日子过得飞快,整个世代仿佛在不断地急速转变,凡事讲求速…

Django权限系统auth模块详解

转自:原文出处 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理。 auth可以和admin模块配合使用, 快速建立网站的管理系统。 在INSTALLED_APPS中添加django.contrib.auth使用该APP, auth模块默认启用。 User User是auth…

化妆、护肤的步骤

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 虽然从不化妆,但也记录一下,也许多年后我还是有时间和耐心去化一下呢 .... ---------------------------------…

2014年驾考科目三考试扣分标准(细则)

【导语】:2014年驾考科目三考试的扣分标准是什么?2014年驾考科目三考试的扣分点有哪些?2014年路考有哪些扣分标准?路考扣分项目盘点 一、考试时出现下列情形之一的,评判为不合格: 1、不按规定使用安全带或…

Windows10 网络图标消失 连接不上网络 的解决方法

【背景】电脑win10的,下载一个软件重启之后网络图标消失,并且无法联网。 参照此解决方法: 原因: 【Windows Event Log】服务对应的注册表出现问题,导致无法正常启动,进而导致一些依赖于它的联网服务无法正常…

VUE:解决 [Vue warn]: Error in render: “TypeError: item.slice is not a function“ (取部分数据)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 双重循环中使用 slice方法,报错: [Vue warn]: Error in render: "TypeError: item.slice is not a fun…

广州电子路考视频发布 2014广州电子路考考点

【导语】:科目三电子考考点是什么?广州电子路考有哪些考点/考试项目?广州交警在其官方微博发布了长达9分钟的科目三电子考视频,详解考试要点。一起来看看2014广州电子路考考点/考试项目大全。 科目三电子考考点是什么?没摸过考试车“蒙查查…

函数的重载

函数的重载(function overloading): C允许用同一个函数名定义多个函数,而这些函数的参数个数和参数类型可以不相同。 一个函数名重新赋予它新的含义,使得一个函数名可以多用。 重载函数的参数个数、参数类型或参数顺序…

在 js 中怎样获得 checkbox 里选中的多个值?(jQuery)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 思路:利用name属性值获取checkbox对象,然后循环判断checked属性(true表示被选中,false表…

GFM与博客园markdown测试

博客园流程图 st>start: Start e>end op>operation: My Operation cond>condition: Yes or No?st->op->cond cond(yes)->e cond(no)->op 转载于:https://www.cnblogs.com/oneTOinf/p/11462716.html

路考步骤七步走 科目三考试一定没问题!

路考步骤一:科目三考试时,在上车前,无论你在车辆的什么位置,请务必从车的右侧绕过车头走到驾驶室门前,先观察车前道路上是否有障碍,再观察车后方是否有来车,确保安全后,打开车门&…

VUE项目中 获得多个复选框 checkbox 选中的值(jquery)+ 解决 Uncaught TypeError: Cannot read property ‘push‘ of undefine

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 表格生成后第一列是复选框,效果: 表格是直接循环展示的后台返回数据,代码写法: 2. 得…