函数之闭包
来源:互联网 发布:飞机模拟驾驶软件 编辑:程序博客网 时间:2024/06/05 08:33
申明:个人理解,欢迎大神指正。
通俗解释:一个函数能使用另外一个函数里的变量就可称之为闭包,比如小明兜里有50元,小华兜里也有50元,但小华能使用小明兜里的50元。
下面看一下例子:
var name = 'xiao A';var obj = { name:'xiao B', getName:function(){ return function(){ return this.name; } }};alert(obj.getName()());
猜一下,会弹出什么样的结果?答案是会弹出 ‘xiao A’,为什么?
可能 obj.getName()()这样的写法你不是很理解,但是如果你alert(obj.getName())你会发现弹出的是一个函数:
比如我申明一个变量 var f = obj.getName();然后再去alert(f);
这个函数的作用域是全局的 然后再去alert(f()),返回的return this.name,这个this显然会去它的平级或者上级去找,所以会弹出‘xiao A’,那么怎样会弹出‘xiao B’呢? 看着只需要加一行代码如下:
var name = 'xiao A';var obj = {//1 name:'xiao B', getName:function(){//2 //在这里申明一个变量,this总是指向调用者 var o = this; return function(){//3 return o.name ; } }};alert(obj.getName()());为什么申明了一个变量就会得到你理想的结果呢?因为javascript 在执行的时候,回去看下一个执行域(//3)是否有使用当前执行域(//2)里的局部变量,如果没有 var o就将会被回收,如果有则将会保存这个变量。所以上例就会弹出‘xiao B’.
相信看到这里,你大概对闭包有所了解了,下面再看个例子
function f(x){// 2 var temp = x ; //局部变量//temp已经没有被使用 return function(x){// 3 (function 有了一个执行域 var obj) temp += x ;// 又被使用了 alert(temp); } } var a = f(50);//alert(a);a(5); a(10);a(20);
手动去尝试一下吧!
阅读全文
1 0
- 函数之闭包
- javascript函数闭包之初体验~~~
- js高级函数之闭包
- JS之匿名函数与闭包
- JavaScript加强之匿名函数(闭包)
- JavaScript之匿名函数和闭包
- Swift之函数和闭包
- 函数编程之闭包漫谈(Closure)
- javascipt之匿名函数和闭包
- Python函数式编程之闭包
- JavaScript之----匿名函数、闭包
- python之嵌套函数与闭包
- javascript之闭包与匿名函数
- JavaScript之函数定义与闭包
- js之函数与闭包
- 闭包之自执行函数
- scala基础之函数和闭包
- html之闭包函数应用
- Matlab的运算符
- codeforce : Educational Codeforces Round 22
- 189. Rotate Array
- Tomcat服务器的监听及宕机自动重启的开发
- AndroidStudio1.4创建项目的build.gradle(Module:app)中的配置
- 函数之闭包
- php新特性你知道多少
- bzoj3143/洛谷3434 游走 高斯消元求期望
- 从《人民的名义》看智慧园区运行监控可视化
- 多线程总结
- matplotlib基础
- 十分钟快速理解依赖注入
- dev/watchdog和dev/watchdog0 是同一个设备
- codeforces_814B.An express train to reveries