javascript高级开发学习笔记六
来源:互联网 发布:人物合成软件 编辑:程序博客网 时间:2024/06/05 09:14
1.递归:使用arguments.callee代替函数名来实现。
2.闭包:有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。 闭包有点像匿名函数
当某个函数第一次被创建时,会创建一个执行环境(execution context)及相应的作用域,并把作用域赋值给一个特殊的内部属性[[Scpoe]]。然后,使用this、arguments和其它定义的参数来初始化函数的活动对象。
变量对象:每个执行环境都有一个表示变量的对象。全局环境的变量对象始终存在,局部环境的变量对象,则只在函数执行过程中存在。
在创建函数时,会创建一个预先包含全局变量对象的作用域链,这个作用域链被保存在内部的[[Scope]]属性中。当调用该函数时,会为函数创建一个执行环境,然后通过复制函数的[[Scope]]属性中的对象构建起执行环境的作用域链。
在一个函数内部定义的函数会包含外部函数的活动对象,外部函数的活动对象会添加到内部函数的作用域中。当外部函数执行完毕后,作用域链会被销毁,活动对象不会被销毁(仍然会留在内存中),因为匿名函数(内部函数)的作用域链仍然在引用这个活动对象。直到匿名函数销毁后,外部函数才会被销毁。
2.1 闭包与变量:作用域链的这种配置引出了一个副作用,即闭包只能取得包含函数中任何变量的最后一个值。闭包所保存的是整个变量对象,而不是某个特殊的变量。
2.2 this对象:在闭包中使用this会导致一些问题,this对象是在运行时基于函数的执行环境绑定的,在全局函数中,this相当于window,而当函数被做为某个对象的方法使用时,this等于那个对象。匿名函数的执行环境具有全局性,因此this对象通常指向window。
2.3 内存泄露:如果闭包的作用域链中保存着一个HTML元素,那么就表示该元素将无法被销毁。
3.模仿块级作用域
(function(){
//这里是块级作用域
})();
这种块级作用域定义方式是一个闭包
4.私有变量
通过闭包实现特权方法,实现函数外部访问函数内部属性。
静态私有变量、模块模式、增强的模块模式。
- javascript高级开发学习笔记六
- javascript高级开发学习笔记一
- javascript高级开发学习笔记二
- javascript高级开发学习笔记三
- javascript高级开发学习笔记四
- javascript高级开发学习笔记五
- javascript高级开发学习笔记七
- javascript高级开发学习笔记八
- javascript高级开发学习笔记九
- javascript高级开发学习笔记十
- Javascript 学习 笔记六
- JavaScript学习笔记六
- javascript高级程序设计笔记(六)
- JavaScript高级程序设计笔记 BOM (六)
- javascript高级程序设计学习(六)-----事件
- 《JavaScript高级程序设计 第三版》学习笔记 (六) 函数与闭包详解
- 《JavaScript高级程序设计 第三版》学习笔记 (六) 函数与闭包详解
- 《JavaScript高级程序设计 第三版》学习笔记 (六) 函数与闭包详解
- Android软键盘弹出,界面整体上移的问题
- 函数调用--笔记
- CICSP2016 第二届计算智能通信及信号处理国际会议
- iOS开发- UICollectionView详解+实例
- std::string 和 c风格字符串
- javascript高级开发学习笔记六
- Cgroup基本使用
- Android:Service(二)——以绑定方式启动Service
- Python 导入外部类文件
- js递归
- Android GCM push通知
- 关于SQL中,C#监视某张表SqlDependency学习笔记
- Android的各种Drawable讲解
- LayoutSubviews方法