闭包

作者: 兰夏天 | 来源:发表于2018-02-27 09:08 被阅读0次

1闭包
蓝色背景代表不是很明白。
1闭包会使得函数的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页性能问题。在IE中还可能导致内存泄漏。尽量在退出函数之前,讲不使用的局部变量全部删除。
2闭包会在父函数外部,改变父函数内部变量的值。所以如果你把父函数当作对象使用,把闭包当作他的公共方法,把内部变量当作它的私有属性,这是一定要小心,不要随便改变父函数内部变量的值。
3 有权访问另一个函数作用域内变量的函数都是闭包。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
//情况1 陷阱
// function f(){
// var a=[];
// var i;
// for(i=0;i<3;i++){
// a[i]=function(){
// return i;
// };
// 这里返回的时函数引用而不是函数调用。函数不调用就不会执行
// }
// return a;
// }
// var test=f(); // 此事a[i]=[f,f,f] f是循环三次后的函数即i等于3的时候。for循环已经把i等于3了,而都是指向函数的引用没有调用。
// alert(test0); // 当开始调用的时候i都是3
// alert(test1);
// alert(test2);
// 以上弹出的都是3。
//这里的陷阱就是:函数带()才是执行函数! 单纯的一句 var f = function() { alert('Hi'); }; 是不会弹窗的,后面接一句 f(); 才会执行函数内部的代码。上面代码翻译一下就是:

//情况2
function f(){
var a=[];
var i;
for(i=0;i<3;i++){
a[i]=(function(x){
return function(){
return x;
}
})(i); //注意自调用写法。
}
return a;
}
var test=f();
//调用后他的内部FOR循环函数内部已经自调用了,因此
//a[i]=function(i){return i};
alert(test0);
alert(test1);
alert(test2);

//情况3
// function f(){
// function test(x){
// return function(){
// return x;
// }
// }
// var a=[];
// var i;
// for(i=0;i<3;i++){
// a[i]=test(i);
// }
// return a;
// }
// var res=f();
// alert(res0);
// alert(res1);
// alert(res2);

</script>

</body>
<html>
4 注意自调用函数的形式, 立即执行的函数
例如: (function test(){要执行的代码段})();

相关文章

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • 闭包,闭包,闭包

    1、这家伙到底是什么? 网上关于这个的讨论的太多了太多了,有各种的举例子,但是大部分还在寻找这个答案的小伙伴对于变...

  • 闭包-Closures [swift 5.1]

    闭包的语法 尾随闭包 闭包逃离 自动闭包

  • Day7 闭包(Closures)

    本页包含内容:• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包 1、闭包表达式 闭包...

  • Python闭包

    闭包 = 环境变量 + 函数 调用闭包内部的环境变量 闭包的经典误区 闭包与非闭包实现人类走路 非闭包 闭包

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

  • swift- 闭包一

    /*• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包*/

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • Swift-进阶 :闭包(二)逃逸闭包 & 非逃逸闭包

    本文主要分析逃逸闭包 、非逃逸闭包、自动闭包 逃逸闭包 & 非逃逸闭包 逃逸闭包定义 当闭包作为一个实际参数传递给...

  • javascript闭包详解

    跟我念 bi 闭 bao包 ,闭包的闭,闭包的包。。 闭包的简介 在计算机科学中,闭包(英语:Closure),又...

网友评论

      本文标题:闭包

      本文链接:https://www.haomeiwen.com/subject/lrkpxftx.html