Javascript closure 闭包应用的两个场景
来源:互联网 发布:北京网络技术培训机构 编辑:程序博客网 时间:2024/05/04 16:12
场景
1. 异步(Async)
for(var i=0;i<5;i++){ setTimeout(function(){ console.log(i); },100);}
输出:
55555
闭包写法
for(var i=0;i<4;i++){ setTimeout((function(i){ console.log(i); })(i),100);}
或
for(var i=0;i<5;i++){ setTimeout(fun(i),100);}function fun(i){ console.log(i);}
输出:
01234
2. 避免命名空间污染 (namespace)
lib/a.js
var i = 111;alert(i);function a() { alert('Hello');}lib/b.js
var i = 222;alert(i);function a() { alert(i);}index.html
<!DOCTYPE html><html><head> <meta charset="utf-8"> <script src="lib/a.js"></script> <script src="lib/b.js"></script></head><body><button onclick="a()">a</button><button onclick="b()">b</button></body></html>
运行index.html
输出
1. 111
2. 222
点击a按钮,输出222.
点击a按钮,输出222.
闭包写法
lib/a.js
function a() { var i = 111; function fun1() { alert(i); } return { fun1: fun1 };}a = a();
lib/b.js
function b() { var i = 222; return function() { alert(i); };}var b = b();
index.html
<!DOCTYPE html><html><head> <meta charset="utf-8"> <script src="lib/a.js"></script> <script src="lib/b.js"></script></head><body><button onclick="a.fun1()">a</button><button onclick="b()">b</button></body></html>
运行index.html
点击a按钮,输出111.
点击a按钮,输出222.
1. 对于闭包中使用的的外部变量, 通过Scope chain 往上找,找到为止(scope chain just for function & static)
2. 注意this,this依赖运行上下文(dynamic)
Source code
git:https://github.com/tianxia1221/Sample.git (folder: javascript_closure)
0 0
- Javascript closure 闭包应用的两个场景
- Javascript闭包(Closure)
- Javascript--闭包(closure)
- Javascript闭包(Closure)
- Javascript闭包(Closure)
- javascript closure 闭包
- Javascript闭包(Closure)
- [Javascript] 闭包 closure
- Javascript闭包(Closure)
- JavaScript闭包(Closure)
- JavaScript函数闭包(closure) 的理解
- javascript的闭包closure整理
- 学习JavaScript的闭包(closure)
- js closure js 闭包的应用
- JavaScript中的闭包(Closure)
- C#、Javascript闭包(closure)
- Javascript闭包(Closure)
- Javascript闭包(Closure)
- LeetCode31. Next Permutation
- 杨辉三角
- 安卓xml样式详解
- Unity5.x实现简易语音聊天(二) 录音与播放
- 聊聊 Redis 使用场景
- Javascript closure 闭包应用的两个场景
- Unity3D优化
- POJ 1436 Horizontally Visible Segments [线段树-区间更新]【数据结构】
- 函数式编程的前世今生
- android leanback使用详解以及获取焦点高亮
- Android开发人员不得不收集的代码(持续更新中)
- PHPStudy2016的一些说明
- 二分查找的坑点与总结
- Ionic开发自定义插件