因为实验室项目要用,所以最近在学习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

代码里面有注释,就不写太多了。

<!--闭包是指有权访问另一个函数作用域的变量的函数-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<!--<a href="#" id="size-12">12</a>-->
<!--<a href="#" id="size-14">14</a>-->
<!--<a href="#" id="size-16">16</a>--> <script language="JavaScript">
// function makeFunc(){
// var name = "Mozilla";
// function displayName(){
// alert(name);
// }
// return displayName;
// }
// var myFunc = makeFunc();
// myFunc(); // function makeAdder(x){
// return function(y){
// return x+y;
// };
// }
// var add5 =makeAdder(5);
// var add10=makeAdder(10);
// document.writeln(add5(2));
// document.writeln(add10(2)); //闭包允许将函数与其所操作的某些数据(环境)关连起来。这显然类似于面向对象编程。
//在面对象编程中,对象允许我们将某些数据(对象的属性)与一个或者多个方法相关联。
// function makeSizer(size){
// return function() {
// document.body.style.fontSize = size + 'px';
// };
// }
// var size12 = makeSizer(12);
// var size14 = makeSizer(14);
// var size16 = makeSizer(16);
//
// document.getElementById('size-12').onclick=size12;
// document.getElementById('size-14').onclick=size14;
// document.getElementById('size-16').onclick=size16;
//完成面向对象中的私有化
// var Counter = (function(){
// var privateCounter = 0;
// function changeBy(val){
// privateCounter+=val;
// }
// return {
// increment:function(){
// changeBy(1);
// },
// decrement: function () {
// changeBy(-1);
// },
// value:function(){
// return privateCounter;
// }
// }
// })();
// alert(Counter.value());
// Counter.increment();
// Counter.increment();
// alert(Counter.value());
// Counter.decrement();
// alert(Counter.value());
//如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,
// 因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。 //例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。
// 原因是这将导致每次构造器被调用,方法都会被重新赋值一次(也就是说,为每一个对象的创建)。 </script>
</body>
</html>

最新文章

  1. Vue.js的入门
  2. [转]Redis实现分析
  3. Maven学习总结(一)——Maven入门
  4. schedule() 和 scheduleAtFixedRate() 的区别--转载
  5. cakephp recursive -1,0,1,2 速查
  6. PL/SQL:使用pragma restrict_references限制包权限
  7. 【转】Objective-C 与 Runtime:为什么是这样?
  8. 201521123028 《Java程序设计》第12周学习总结
  9. PKUWC2018划水记
  10. kubernetes实战之运行aspnetcore webapi微服务 - kubernetes
  11. [OpenCV-Python] OpenCV 中的图像处理 部分 IV (一)
  12. Python3练习题系列(02)
  13. 大数据处理框架之Strom:Storm集群环境搭建
  14. QtCreator 调试源码
  15. jasper打印实例2 ----通过文件字节流获得PDF格式图片
  16. Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml (mysql)
  17. Java如何将字符串中的敏感词替换为相等数量的星号*
  18. Python之两个列表一起打乱
  19. Linux系统启动管理 系统启动流程
  20. linux-课题练习1

热门文章

  1. TCP字节流与UDP数据报(转)
  2. pat03-树3. Tree Traversals Again (25)
  3. Linux文本处理工具
  4. D3(v5) in TypeScript 坐标轴之 scaleBand用法
  5. java去掉String里面的空格、换行符等
  6. 深入理解JavaScript系列(19):求值策略(Evaluation strategy)
  7. [转]微信小程序登录逻辑梳理
  8. 面向对象(基础oop)之类与对象
  9. js之方法
  10. caffe-windows中classification.cpp的源码阅读