匿名函数以及闭包

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

每个函数在调用时,其活动对象都会自动取得两个特殊变量: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. Android源码分析之MessageQueue

    下面让我们花些时间来看看MessageQueue的具体实现,不过在分析代码之前让我们来理解下在类开头的一大段comments. MessageQueue是比较低层的类,是持有Message(在Loop ...

  2. 高质量c/c++里的strcpy()

    已知strcpy函数的原型是:        char * strcpy(char * strDest,const char * strSrc);    1.不调用库函数,实现strcpy函数.    ...

  3. linux 查看系统版本

    博客分类: linux LinuxRedHatDebianSuSE  几种查看linux版本信息的方法: uname -a cat /proc/version cat /etc/issue lsb_r ...

  4. 【mysql】关于IO/内存方面的一些优化

    这里使用的是mysql  Ver 14.14 Distrib 5.6.19, for Linux (i686) using  EditLine wrapper 一.mysql目录文件 ibdata1: ...

  5. spring 容器加载完成后执行某个方法

    理论 刚好再开发过程中遇到了要在项目启动后自动开启某个服务,由于使用了spring,我在使用了spring的listener,它有onApplicationEvent()方法,在Spring容器将所有 ...

  6. Linux awk

    一.简介 二.教程 1)过滤字符(对大小写很敏感) dir -l | awk '$3=="root" {print $1,$3,$4, $9;} ' cat tecmint_dea ...

  7. libstdc++

    一.简介 二.安装 http://www.linuxfromscratch.org/lfs/view/development/chapter05/gcc-libstdc++.html 三.其他 1)l ...

  8. 【node.js】安装express后,'express' 不是内部或外部命令的问题

    因express默认安装是最新的版本,已经是4.x.x的版本.而最新express4.0+版本中将命令工具分出来了,所以必须要安装express-generator,执行: D:\TOOLS\Node ...

  9. 20150912华为机考2之"输入一段字符串(英文),将每个单词首字母大写后输出"

    还有其他一些(隐性)要求(要不然无法通过测试): .如果首字母已经大写,则不用变 .不是英文字母的不变 e.g. Input: hello world! this is _Ljj speaking! ...

  10. windows 7系统搭建本地SVN服务器的过程

    Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...