匿名函数以及闭包

匿名函数就是没有名字的函数。闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式是在一个函数的内部创建另一个函数。闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存,因此尽量少用闭包。闭包只能取得包含函数中任何变量的最后一个值。闭包的作用域包括它自己的作用域,包含函数的作用域,全局作用域。

每个函数在调用时,其活动对象都会自动取得两个特殊变量:this和arguments。内部函数在搜索这两个变量时,只会搜索到其活动对象(包含函数)为止,不会访问到外部对象。所以如果想访问外部对象的变量,可以把外部作用域中的this对象保存在一个闭包能访问的变量里,这样闭包就可以访问该对象了。例如:

var name = "window";

var object = {

  name : 'object',

  getFunc : function(){

    var that = this;    //将外部作用域中的this对象保存在变量that里

    return function(){

      return that.name;    //闭包可以访问变量that,也就是访问外部的this对象

    }

  }

}

闭包会引用包含函数的整个活动对象。使用完闭包后要解除引用,避免内存泄漏。

块级作用域

用匿名函数模仿块级作用域(私有作用域)的语法如下:

(function(){

  //这里是块级作用域

})();

在匿名函数(块级作用域)中定义的变量,都会在执行结束时销毁。在匿名函数中,能够访问包含函数的所有变量。

总结自:《javascript 高级程序设计》

JS 之匿名函数的更多相关文章

  1. js处理匿名函数

    首先js 有DOM0 和DOM2级事件 DOM 0级事件处理一般是直接把一个函数分配给一个事件处理程序,既可以在元素中直接分配一个事件处理程序 一个元素可以绑定多个事件 DOM0: <div i ...

  2. js的匿名函数和js的onload函数

    所谓js匿名函数就是当用户一打开页面时不等到文档加载完就会执行里面的代码,语法如下: (function(){})(); js的onload函数代码如下: <!DOCTYPE html>& ...

  3. JS里面匿名函数的调用 & 变量作用域的实验

    参考 http://www.educity.cn/wenda/54753.html 已实验验证结果正确. 1.下列哪些正确?(B.C) A.function(){ alert("Here!& ...

  4. js中匿名函数

    今天碰到一道题,里面既包含了匿名函数的知识,也包含了预编译,函数的传参(形参),感觉迷迷糊糊的,所以想着做个总结. var foo={n:1}; (function(foo){ console.log ...

  5. JS中匿名函数$(function(){ })和(function(){})()的区别

    “$(function(){ });” Jquery语法的匿名函数,用于存放操作DOM对象的代码,执行其中代码时DOM对象已存在: (通过这样就可以在页面加载完成时通过ajax再异步加载一些数据) “ ...

  6. js笔记:匿名函数

    ;(function(){ alert('啥也没做');})(); 会弹框. 这是个匿名函数.最前面的分号可以去掉,仅仅是在代码压缩时防止出错. 该函数可以拆解成非匿名函数: var a= funct ...

  7. 总结下js中匿名函数的写法~好几天没写博客了。。。

    小哥最近很是心烦啊,不仅仅要继续以现任前端小白,未来前端攻城狮的身份苦逼学习,还要用剩余的时间去完成毕业设计.早知如此,当初我为毛要报考数学这么个苦逼专业....昨天一整天的时间在研究毕设,感觉代码已 ...

  8. js重点--匿名函数

    推荐博客:https://www.cnblogs.com/pssp/p/5216668.html 函数是必须要有函数名的,不然没有办法找到它,使用它. 如果没有名字必须要有一个依附体,如:将这个匿名函 ...

  9. js中匿名函数和回调函数

    匿名函数: 通过这种方式定义的函数:(没有名字的函数) 作用:当它不被赋值给变量单独使用的时候 1.将匿名函数作为参数传递给其他函数 2.定义某个匿名函数来执行某些一次性任务 var f = func ...

随机推荐

  1. 最简MacOs10.8安装

    虚拟机中安装Mac Os X的方法网上很多很多,但是对刚接触的朋友来讲肯定不是一件容易的事,这个自己深有体会,包括去年已经装好过,今年再找教程安装都装不起来,期间还出现了各种问题,幸好去年装好之后备份 ...

  2. Unity与Android的相互交互

    1.Unity调用Android. Unity块代码: using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.play ...

  3. AFNetworking使用方法

    官网下载2.5版本:http://afnetworking.com/ 此文章是基于AFNetworking2.5版本的,需要看AFNetworking2.0版本的请看上一篇文章:AFNetworkin ...

  4. Swift学习--闭包中的懒加载(四)

    class ViewController: UIViewController { //格式:定义变量时前使用lazy来修饰变量,后面通过等到赋值一个闭包 // 注意点:1.必须是用var 2.闭包后面 ...

  5. iOS开发之网络编程--1、AFNetwork 3.x 的所有开发中常用基础介绍

    前言:第三方网络请求框架中AFNetwork 3.x收欢迎程度相当高的: 由于iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载 ...

  6. 《慕客网:IOS动画案例之会跳动的登入界面(上)》学习笔记 -Sketch的使用

    选中需要放进文件夹里的文件,然后按command+G,就会自动生成文件夹并把需要放进的文件包含进去了.(组 Group) 选中需要锁住的图层,然后按command+shift+L就可以将图层锁住.(锁 ...

  7. tomcat下部署润乾报表

    因为项目需要,需要在项目中配置润乾报表,之前一直是用的jboss服务器,此处调整为tomcat时出错,然后各种找错,找答案,最后终于好了,然后总结一下. 首先在apache-tomcat-6.0.43 ...

  8. Linux Shell 06 数学运算

    1.let let "var+=1" let v2= echo $var,$v2 #2,4 a.只支持整数运算 b.基本支持所有运算符(包括++,——,**) c.表达式中使用变量 ...

  9. ELK 信息统计分析-1

    Aggregations 格式如下: "aggregations"{ //可以简写为aggs "<aggregation_name>":{ //名称 ...

  10. xamarin.android 沉浸式状态栏

    public class SystemBarTintManager { /** * The default system bar tint color value. */ public static ...