关于闭包和变量的作用域的问题
来源:互联网 发布:阿克苏新站怎么做优化 编辑:程序博客网 时间:2024/06/09 13:45
闭包只能取得包含函数中的任何变量的最后一个值,所以尽量把值放在自己的局部变量里面,
这样可以提高数据的搜索性能,避免作用域查找
看例子:
function cFunction(){
var result = new Array();
for (var i=0; i<10; i++){
result[i] = function(){
return i;
}
}
return result;
}
var funs = cFunction();//这个时候funs是一个数组,里面放得是函数的引用,指向10个不同的函数。
for(var i=0; i<funs.length; i++){
document.write(funs[i]() + "<br />");
}这里打印出10个10,因为当你调用10个匿名函数时,它需要返回i,但是它本身不包含i,所以它要
向上级作用域需找,这个时候cFunction里面的i值已经是10,所以打印出来10个10.
解决方法,就是将值直接保存在自己的局部变量里面,例子:
function cFunction(){
var result = new Array();
for (var i=0; i<10; i++){
result[i] = function(num){
return function(){
return num;
};
}(i);
}
return result;
}
var funs = cFunction();//这个时候funs是一个数组,里面放得也是函数的引用,指向10个不同的函数。
for(var i=0; i<funs.length; i++){
document.write(funs[i]() + "<br />");
}//这里会输出0~9,因为每个匿名函数要返回num,它本身的作用域里面没有,就会向上寻找,上级的匿名函数里面是
包含num的,而num的值刚好就是0~9,所以拿到的就是0~9.所以建议闭包中也尽量把数据保存在自己作用域的局部变量中。
- 关于闭包和变量的作用域的问题
- 关于栈和堆中变量的作用域问题
- JavaScript的变量作用域和闭包操作
- JavaScript的变量作用域和闭包操作
- 关于变量的作用域问题
- 关于变量的作用域问题1
- Swoole 关于变量作用域的问题
- 关于JS变量的作用域,作用域链与闭包
- 变量的作用域--js闭包
- javascript中的【变量作用域】和【作用域链】以及【闭包】的理解
- JavaScript闭包作用域变量问题
- 关于变量的作用域
- JavaScript 变量作用域和闭包
- 关于Sqlserver中变量的作用域和生存期问题
- 一个问题,关于函数嵌套后的变量作用域
- 请教一下关于变量的作用域问题
- JavaSript中变量的作用域 闭包的理解
- JavaScript关于作用域、作用域链和闭包的理解
- android 自定义权限
- HTML <fieldset> 群组标签
- js中的url编码
- hdu 2255 KM 奔小康赚大钱
- 在现实增强应用Layar中显示ArcGIS数据(Ⅱ)
- 关于闭包和变量的作用域的问题
- COM组件设计与应用(二)——GUID和接口
- C++类型转换
- WritableWorkbook 导出EXCEL
- 进程间通信--信号量
- java的concurrent用法详解
- Hardboiled CSS3 Media Queries
- 性能测试知多少---系统架构分析
- 网页连接数据库(sql server 2008)代码