[Javascript] 闭包 closure
来源:互联网 发布:淘宝穿越火线刷经验 编辑:程序博客网 时间:2024/05/22 06:33
闭包是十分的重要
校招面试的几家公司都要问到闭包的问题
最经典的是问到
闭包是什么 有什么作用
闭包循环和累加的应用
更改闭包的作用域
(1) 概念
全局下 取不到局部的变量的值
<script type="text/javascript"> function a(){ var name1="jessica"; console.log(name1); } console.log(name1); //Uncaught ReferenceError: name1 is not defined </script>
闭包是一个 有权访问另一个函数作用域的变量的函数。且始终放在内存当中
<script type="text/javascript"> function a(){ var name="jessica"; return function(){//匿名函数 闭包的使用 return name; } } console.log(a()()); //jessica</script>
(2) 闭包+变量
问题:闭包只能取到任何变量的最后一个值
块级作用域
(function(){
//块级作用域
})();
(3) 闭包经典案例 - 累加
<script type="text/javascript"> function a(){ var i=100; return function(){ i++; return i; } } var b=a();//获取函数 console.log(b()); console.log(b()); console.log(b()); console.log(b()); console.log(b());</script>
(4) 闭包经典案例 - 循环
问题:
<script type="text/javascript"> function a(){ var array=[]; for (var i = 0; i < 5; i++) { array[i]=function(){ return i; } } return array; } var b=a(); for (var i = 0; i < b.length; i++) { console.log(b[i]());//五个5 不是01234 //b[i]调用的是匿名函数,匿名函数并没有自我执行 //等调用的时候, a()已经执行完毕了 };</script>
解决:
<script type="text/javascript"> function a(){ var array=[]; for (var i = 0; i < 5; i++) { array[i]=(function(i){ return i; })(i);//匿名函数自我执行 } return array; } var b=a(); for (var i = 0; i < b.length; i++) { console.log(b[i]); };</script>
(4) this对象
<script type="text/javascript"> var name="jessica"; var obj={ name:"krystal", a:function(){ return function(){ return this.name; } /*取到的值为什么是jessica? 因为在闭包中, this指的是window */ } }var b=obj.a();console.log(b());//jessica</script>
解决:
(1) that =this
<script type="text/javascript"> var name="jessica"; var obj={ name:"krystal", a:function(){ var that=this; return function(){ return that.name; } } }var b=obj.a();console.log(b());//krystal</script>
(2) call
<script type="text/javascript"> var name="jessica"; var obj={ name:"krystal", a:function(){ return function(){ return this.name; } } } console.log(obj.a().call(obj)); //用obj来冒充, 改变作用域来执行a()</script>
0 0
- Javascript闭包(Closure)
- Javascript--闭包(closure)
- Javascript闭包(Closure)
- Javascript闭包(Closure)
- javascript closure 闭包
- Javascript闭包(Closure)
- [Javascript] 闭包 closure
- Javascript闭包(Closure)
- JavaScript闭包(Closure)
- JavaScript中的闭包(Closure)
- C#、Javascript闭包(closure)
- Javascript闭包(Closure)
- Javascript闭包(Closure)
- 理解Javascript闭包(closure)
- javascript闭包(Closure)初探
- 理解Javascript闭包(closure)
- Javascript闭包(Closure)
- Javascript闭包(Closure)
- 网络设备驱动程序数据结构
- Android 4.0新控件 switch的属性
- 支持向量机通俗导论(理解SVM的三层境界)
- Tomcat在window下直接启动出现一闪而过
- JavaScript 的类型检测
- [Javascript] 闭包 closure
- iOS——关于应用程序生命周期问题
- jquery信息提示插件poshytip 和弹出框插件 jbox,树状图插件ztree,图表插件echarts
- 解决jquery操作checkbox火狐下第二次无法勾选问题
- 腾讯产品总监曹菲-----为何我工作十年,内心仍无比恐慌
- C语言--指针2
- 17 Letter Combinations of a Phone Number
- lov制作注意点
- Android(14)Handler简单例子(1)