因为实验室项目要用,所以最近在学习OpenLayers,但是从来没有做过前端呀,坑爹的,硬着头皮上吧
反正正好借这个机会学习一下JS,本来对这门语言也挺感兴趣的,多多少少写过一下JS代码了,差不多学一些里面的特殊概念了
以前一直觉得闭包这个词太神秘,所以先选这个概念了
参考资料:《JavaScript高级程序设计》
博客:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures(主要是这一篇,代码来源)
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
http://coolshell.cn/articles/6731.html
代码里面有注释,就不写太多了。
1 <!--闭包是指有权访问另一个函数作用域的变量的函数--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <meta charset="UTF-8"> 6 <title></title> 7 </head> 8 <body> 9 <!--<a href="#" id="size-12">12</a>--> 10 <!--<a href="#" id="size-14">14</a>--> 11 <!--<a href="#" id="size-16">16</a>--> 12 13 <script language="JavaScript"> 14 // function makeFunc(){ 15 // var name = "Mozilla"; 16 // function displayName(){ 17 // alert(name); 18 // } 19 // return displayName; 20 // } 21 // var myFunc = makeFunc(); 22 // myFunc(); 23 24 // function makeAdder(x){ 25 // return function(y){ 26 // return x+y; 27 // }; 28 // } 29 // var add5 =makeAdder(5); 30 // var add10=makeAdder(10); 31 // document.writeln(add5(2)); 32 // document.writeln(add10(2)); 33 34 //闭包允许将函数与其所操作的某些数据(环境)关连起来。这显然类似于面向对象编程。 35 //在面对象编程中,对象允许我们将某些数据(对象的属性)与一个或者多个方法相关联。 36 // function makeSizer(size){ 37 // return function() { 38 // document.body.style.fontSize = size + ‘px‘; 39 // }; 40 // } 41 // var size12 = makeSizer(12); 42 // var size14 = makeSizer(14); 43 // var size16 = makeSizer(16); 44 // 45 // document.getElementById(‘size-12‘).onclick=size12; 46 // document.getElementById(‘size-14‘).onclick=size14; 47 // document.getElementById(‘size-16‘).onclick=size16; 48 //完成面向对象中的私有化 49 // var Counter = (function(){ 50 // var privateCounter = 0; 51 // function changeBy(val){ 52 // privateCounter+=val; 53 // } 54 // return { 55 // increment:function(){ 56 // changeBy(1); 57 // }, 58 // decrement: function () { 59 // changeBy(-1); 60 // }, 61 // value:function(){ 62 // return privateCounter; 63 // } 64 // } 65 // })(); 66 // alert(Counter.value()); 67 // Counter.increment(); 68 // Counter.increment(); 69 // alert(Counter.value()); 70 // Counter.decrement(); 71 // alert(Counter.value()); 72 //如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的, 73 // 因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。 74 75 //例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。 76 // 原因是这将导致每次构造器被调用,方法都会被重新赋值一次(也就是说,为每一个对象的创建)。 77 78 </script> 79 </body> 80 </html>
时间: 2024-09-30 14:26:12