JS 之匿名函数
2015-09-07 16:29
225 查看
匿名函数以及闭包
匿名函数就是没有名字的函数。闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式是在一个函数的内部创建另一个函数。闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存,因此尽量少用闭包。闭包只能取得包含函数中任何变量的最后一个值。闭包的作用域包括它自己的作用域,包含函数的作用域,全局作用域。
每个函数在调用时,其活动对象都会自动取得两个特殊变量: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 高级程序设计》
匿名函数就是没有名字的函数。闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式是在一个函数的内部创建另一个函数。闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存,因此尽量少用闭包。闭包只能取得包含函数中任何变量的最后一个值。闭包的作用域包括它自己的作用域,包含函数的作用域,全局作用域。
每个函数在调用时,其活动对象都会自动取得两个特殊变量: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高级程序设计读书笔记(第一章到第五章)
- 【javascript高级程序设计笔记】第四章、第五章
- JavaScript编程珠玑
- JSTL分页显示 动态页码
- JS正则表达式大全
- JSTL 核心标签库 使用
- JavaScript中的匿名函数及函数的闭包
- [转] 主流JS框架中DOMReady事件的实现
- JavaScript数据类型
- js关闭窗口,最大化窗口
- JSONP
- JavaScript面向对象编程--学习
- ExtJS 学习总结 (一)-- MVVM框架概述
- JS----拖拽图层,面向过程,面向对象
- 【前端也要学点算法】快速排序的JavaScript实现
- js读取配置文件(理解版)
- javascript canvas 碰撞检测
- FastJson使用详解Demo
- JS 继承
- 使用JSON进行数据传输