JS 闭包
2015-09-09 13:16
579 查看
Js代码
![](http://elf8848.iteye.com/images/icon_star.png)
function outerFun()
{
var a=0;
function innerFun()
{
a++;
alert(a);
}
}
innerFun()
上面的代码是错错误的.innerFun()的作用域在outerFun()内部,所在outerFun()外部调用它是错误的.
伦理片 http://www.dotdy.com/
改成如下,也就是闭包:
Js代码
![](http://elf8848.iteye.com/images/icon_star.png)
function outerFun()
{
var a=0;
function innerFun()
{
a++;
alert(a);
}
return innerFun; //注意这里
}
var obj=outerFun();
obj(); //结果为1
obj(); //结果为2
var obj2=outerFun();
obj2(); //结果为1
obj2(); //结果为2
什么是闭包:
当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.
--------------------------------------------------------------------------------------------------------
再来看一个例子
Js代码
![](http://elf8848.iteye.com/images/icon_star.png)
function outerFun()
{
var a =0;
alert(a);
}
var a=4;
outerFun();
alert(a);
结果是 0,4 . 因为在函数内部使用了var关键字 维护a的作用域在outFun()内部.
再看下面的代码:
Js代码
![](http://elf8848.iteye.com/images/icon_star.png)
function outerFun()
{
//没有var
a =0;
alert(a);
}
var a=4;
outerFun();
alert(a);
结果为 0,0 真是奇怪,为什么呢?
作用域链是描述一种路径的术语,沿着该路径可以确定变量的值 .当执行a=0时,因为没有使用var关键字,因此赋值操作会沿着作用域链到var a=4; 并改变其值.
![](http://elf8848.iteye.com/images/icon_star.png)
function outerFun()
{
var a=0;
function innerFun()
{
a++;
alert(a);
}
}
innerFun()
上面的代码是错错误的.innerFun()的作用域在outerFun()内部,所在outerFun()外部调用它是错误的.
伦理片 http://www.dotdy.com/
改成如下,也就是闭包:
Js代码
![](http://elf8848.iteye.com/images/icon_star.png)
function outerFun()
{
var a=0;
function innerFun()
{
a++;
alert(a);
}
return innerFun; //注意这里
}
var obj=outerFun();
obj(); //结果为1
obj(); //结果为2
var obj2=outerFun();
obj2(); //结果为1
obj2(); //结果为2
什么是闭包:
当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.
--------------------------------------------------------------------------------------------------------
再来看一个例子
Js代码
![](http://elf8848.iteye.com/images/icon_star.png)
function outerFun()
{
var a =0;
alert(a);
}
var a=4;
outerFun();
alert(a);
结果是 0,4 . 因为在函数内部使用了var关键字 维护a的作用域在outFun()内部.
再看下面的代码:
Js代码
![](http://elf8848.iteye.com/images/icon_star.png)
function outerFun()
{
//没有var
a =0;
alert(a);
}
var a=4;
outerFun();
alert(a);
结果为 0,0 真是奇怪,为什么呢?
作用域链是描述一种路径的术语,沿着该路径可以确定变量的值 .当执行a=0时,因为没有使用var关键字,因此赋值操作会沿着作用域链到var a=4; 并改变其值.
相关文章推荐
- 常用的JS-备份
- JavaScript 循环中的闭包( for循环 i )
- js基于面向对象实现网页TAB选项卡菜单效果代码
- javascript得知 - js的Date对象函数
- js && ||
- js 判断日期大小、是否在时间范围内等处理
- JS实现自动变换的菜单效果代码
- JS异步编程
- JS实现自动变化的导航菜单效果代码
- 深入解析js异步编程利器Generator
- 3 ways of including JavaScript in HTML
- 使用impress.js制作幻灯片
- json(map)与xml的转化
- javascript json对象与json格式字符串区别
- JS 获取浏览器窗口大小
- ajax+JS 实现分页
- 88 js AMD CMD seaJS
- js复制代码到其他地方+鼠标悬停显示小手
- javascript indexOf() 和lastIndexOf()方法比较
- 前台提交的时候, 要封装JSON1