学习重点知识总结
 
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. Spring Boot从入门到实战(十):异步处理

    原文地址:http://blog.jboost.cn/2019/07/22/springboot-async.html 在业务开发中,有时候会遇到一些非核心的附加功能,比如短信或微信模板消息通知,或者 ...

  2. 利用DOMNodeInserted监听标签内容变化

    var exeFlag = 0;//控制执行业务次数标记$('#list1').bind('DOMNodeInserted', function () { if(!/img/.test($(" ...

  3. 小白学python-day05(2)-列表及其操作

    今天是day05(2),以下是学习总结 但行努力,莫问前程. --------------------------------------------------------------------- ...

  4. python带有GIL解释器锁

    1.GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定. 2.每个CPU在同一时间只能执行一个线程(在 ...

  5. 关于object对象转换为int类型

    注意:不能强制转换!!! Object a; int b = Integer.parseInt(String.valueOf(a));

  6. git远程服务器回滚

    1.git log查找commit hash 2.git reset --hard hash 回滚本地git库 3.git push -f origin(git仓库的url) branch名 强制提交

  7. 【Java】点击 JButton 修改 Jlabel 的文字和字体颜色

    要求: 点击 JButton 后执行一个方法 m(比较耗时),点击时改变 JLabel 的字体和颜色,方法 m 运行结束后再次修改 JLabel 的字体和颜色. 刚开始点击,都是方法 m 运行结束后, ...

  8. 【故障公告】发布 .NET Core 版博客站点引起大量 500 错误

    非常抱歉,今天上午的博客站点故障给大家带来了很大的麻烦,请大家谅解.这次故障是我们发布 .NET Core 版博客站点引起的,虽然我们进行了充分的准备,但还是低估了高并发下的复杂问题. 以下是故障背景 ...

  9. React 基于antd+video.js实现m3u8格式视频播放及实时切换

    文档连接地址(官网看起麻烦,看中文别人整理好的)https://blog.csdn.net/a0405221/article/details/80923090 React项目使用  安装依赖 npm ...

  10. JS构建多端应用

    JS构建多端应用 一,需求与介绍 1.1,介绍 1,Taro 是一套遵循 React语法规范的 多端开发 解决方案.现如今市面上端的形态多种多样,Web.React-Native.微信小程序等各种端大 ...