学习重点知识总结
 
1.闭包知识点巩固
       闭包函数:
                   1.可以实现函数外部访问函数内部的变量
                    2.在JavaScript只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。
               用途:
                    1.可以读取函数内部的局部变量
                    2.让这些变量始终保存在内存当中(延长局部变量的生命周期)
   闭包出现的场景:
        1:函数外部能访问函数内部的变量
        2:在立即执行函数
        3:闭包可以保留变量在内存里面( 给节点集合绑定事件,获取每个节点的索引值 )
        4:柯里化函数
 
//面试题:  一个函数的调用   fn(2)(3)(4)      得到的结果位24;   这个函数是怎样写的??
    function fn(a){
        return function(b){
            return function(c){
                console.log(a * b * c);
            }
        }
    }
    fn(2)(3)(4);
    //柯里化函数   ->  使用闭包.
 
    闭包影响:
        1、由于闭包会使得函数中的变量都被保存在内存当中,内存会消耗很大,所以不能够滥用闭包,否则会造成网页性能的问题.在IE中可能导致内存泄漏   
        2、闭包会在函数外部,改变函数内部的的变量值。你会把原本的私有变量变成公用变量,这样是不行的。所以不要随便改变父级函数内部变量的值
       
                不要刻意的使用闭包,尽量少使用闭包。
                闭包就会开辟内存,可能造成内存泄漏
    拓展:js 垃圾回收机
        1:函数在执行的时候.在内存中开辟空间,存储函数的变量,如果函数执行完毕.则开辟的内存开始释放.在次调用函数,变量则继续初始化重复上面的步骤.
        2:如果函数内部的变量被相关引用的情况.则变量不会被收回.
 
面试相关:
        什么是闭包:
            1:函数外部能访问函数内部的变量
            2:闭包延长了函数内部变量的生命周期,使变量一值在内存中不被销毁
 
实例讲解:
    目的:再函数外部访问函数内部的变量.
     function fn(){
        var a = 10;
         return function(){         //在fn里面return出一个函数(闭包函数)
            a++
             return a;
         }
     }
     var n = fn();
     console.log(n());
 
     function fn(){
         var a = 10;
         a++
      console.log(a);
      }
     fn();
     fn();
     fn();
     fn();
     fn();
2.面向对象回顾
   思考: 多次实例化对象的时候.里面所用到的方法是否一致.
                     function person(name,age){
                        this.name = name;
                        this.age = age;
                        this.eat = function(){
                        }
                        this.sleep = function(){}
                    }
                    var p1 = new person('ws','10');
                    var p2 = new person('x','30');
                    console.log(p1.eat == p2.eat);  //false     只要new  都回在内存中开辟一块空间.
            prototype:
                    存储公共的属性和方法
                    扩展属性和方法
                    节省内存
                    实现继承!!!!!!!!!!
                 例如:function person(name,age){
                        this.name = name;
                        this.age = age;
                    }
                    // person.prototype.eat = function(){}
                    // person.prototype.sleep = function(){}
                    person.prototype = {
                        eat:function(){},
                        sleep : function(){}
                    }
3.作用域问题
        局部作用域(函数作用域)
        全局作用域
        作用域链: 变量以链式查找的方式.首先先访问自身.,如果自身找不到当前变量,会向父级函数查找.
4.原型链问题
 
//p1.work();     //  实例化对象能直接访问构造函数prototype上的方法。
    //console.dir(Person);  //构造函数里面的方法存在在prototype上面
    //打印p1  观察 在实例化对象里面 方法放在哪里了???????
    //console.dir(p1);    //实例化对象的方法存放在__proto__上面
    /*
        分析:
            因为p1 是构造函数Person构造出来的。
            Person方法放在prototype
            实例化对象p1的方法放在__proto__
            猜想:Person.prototype  和 p1.__proto__   是否指向的是同一个对象。
            Person.prototype == p1.__proto__        //true
            Person.prototype  和 p1.__proto__ 向的是同一个原型对象
            p1.__proto__.eat()   p1实例化对象 通过__proto__  访问构造函数Person.prototype指向的原型对象
            p1.__proto__.__proto__.eat();
 
原型链:实例对象与原型对象的链接称作原型链。表示方式__proto__  
                原型链的查找过程:
                    实例化对象首先在查找自身的属性,如果有则直接返回,
                    如果没有当前属性,通过__proto__访问 构造这个对象的构造函数的prototype原型对象上查找。    
                    如果当前构造函数仍然没有,通过__proto__开始向Object.protoptype 查找/
 
prototype  和 __proto__   和 constructor(构造器)  之间的关系???
            只有函数上面才存在prototype 指向 的是一个原型对象
               
            对象里面存在__proto__  指构造函数prototype指向的原型对象。
            constructor 构造器 指向的是 构造 实例化对象的构造函数
 

js学习重点难点知识总结 (巩固闭包、原型、原型链)的更多相关文章

  1. 【python基础学习】基础重点难点知识汇总

    python中decorator装饰器 语法示例: @decorator 什么是装饰器: 问题: 定义一个函数后 在运行时动态增加功能 又不想改动函数本身的代码 示例: # 希望对下列函数调用增加lo ...

  2. 关于js的一些基本知识(类,闭包,变量)

    这里写的都是些杂知识,包括私有,类,闭包这些js不可避免的东西,感觉自己有可能会误人子弟.所以有觉得写错了的读者,希望可以及时评论告诉我.我可以及时更正.多谢大家了 1.关于类的创建 类的创建大致可以 ...

  3. three.js学习笔记--基础知识

    基础知识 从去年开始就在计划中的three.js终于开始了 历史介绍 (摘自ijunfan1994的转载,感谢作者) OpenGL大概许多人都有所耳闻,它是最常用的跨平台图形库. WebGL是基于Op ...

  4. Js学习01--基础知识

    一. JavaScript有三种书写格式 1.行内式 <button onclick = 'alert('nice day!');'>Nice Day</button> 2. ...

  5. JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)

    JavaScript继承的6种方法 1,原型链继承 2,借用构造函数继承 3,组合继承(原型+借用构造) 4,原型式继承 5,寄生式继承 6,寄生组合式继承 1.原型链继承. <script t ...

  6. JS闭包、作用域链、垃圾回收、内存泄露相关知识小结

    补充: 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变 ...

  7. Android开发重点难点1:RelativeLayout(相对布局)详解

    前言 啦啦啦~博主又推出了一个新的系列啦~ 之前的Android开发系列主要以完成实验的过程为主,经常会综合许多知识来写,所以难免会有知识点的交杂,给人一种混乱的感觉. 所以博主推出“重点难点”系列, ...

  8. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  9. JS学习之路,菜鸟总结的注意事项及错误更正

    JavaScript 是一种面向对象的动态语言,它的语法来源于 Java 和 C,所以这两种语言的许多语法特性同样适 用于 JavaScript.需要注意的一个主要区别是 JavaScript 不支持 ...

随机推荐

  1. 实验吧--web--你真的会php吗

    ---恢复内容开始--- 实验吧的一道题php审计题.拉下来写一写. http://ctf5.shiyanbar.com/web/PHP/index.php 打开之后说have fun 那就抓包来看看 ...

  2. PTA L2-031 深入虎穴 非dfs的一点想法

    著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报.已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门.每一扇门背后或者是一个房间,或者又有很多条路,同样是每条 ...

  3. C# 一句很简单而又很经典的代码

    一.知识点 二.问题 如果以上四个问题,你很自信,那么以下,您就不要看了,因为我想说的东西真的很简单. 如果你开始怀疑自己,可以继续向下看.你自己到底真的理解吗??? 再看下面这段代码有没有问题? c ...

  4. Quartus ii调试技巧_01

    前几天李主任跟我分享了一些特别好用的调试技巧: 1)System Sources and Probes Editor---类似于人为设置触发条件,创建虚拟按键等功能,这段时间一直在做一个电机的驱动,板 ...

  5. linux初学者-mail篇

     linux初学者-mail篇 邮件是在生活中比较常用的一个工具,在linux系统中的邮件也是.在linux中,邮件的发送所用的服务时postfix,邮件的接收所用的服务是pop(110端口).ima ...

  6. Java编程思想,初学者推荐看看

    这是一本介绍Java编程思想,如何从面向过程的编程思想转换为面向对象的编程思想.我个人是比较建议新手看一下的,思想掌握了,学起来自然也就会方便很多的,我还有一些Java基础的数,有需要的可以找我要,都 ...

  7. Codeforces Round #565 (Div. 3)

    传送门 A. Divide it! •题意 给定一个数n, 每次可以进行下列一种操作 1.如果n可以被2整除,用n/2代替n 2.如果n可以被3整除,用2n/3代替n 3.如果n可以被5整除,用4n/ ...

  8. thinkphp 插件

    1.切换到项目根目录,使用composer require 5ini99/think-addons:dev-master命令安装thinkphp插件 如果是root用户或是管理员执行的话会有提示 等一 ...

  9. 关于写自定义的SQL接口出现的问题

    1.<if test="   as != ' ' "></if> 与    <if test='   as != " "    ' ...

  10. Java编程基础阶段笔记 day04 Java基础语法(下)

    day04 Java基础语法 (下) 笔记Notes要点 switch-case语句注意 switch-case题目(switchTest5) 循环执行顺序 if-else 实现3个整数排序 Stri ...