学习重点知识总结
 
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. 个人永久性免费-Excel催化剂功能第100波-透视多行数据为多列数据结构

    在数据处理过程中,大量的非预期格式结构需要作转换,有大家熟知的多维转一维(准确来说应该是交叉表结构的数据转二维表标准数据表结构),也同样有一些需要透视操作的数据源,此篇同样提供更便捷的方法实现此类数据 ...

  2. 个人永久性免费-Excel催化剂功能第26波-正确的Excel密码管理之道

    Excel等文档肩负着我们日常大量的信息存储和传递工作,难免出现数据安全的问题,OFFICE自带的密码设置,在什么样的场景下才有必要使用?网上所宣称的OFFICE文档密码保护不安全,随时可被破解,究竟 ...

  3. 读完这篇文章,5G 就没有秘密了

    如果我们现在要制作一个 2019 年的热词排行榜,相信 5G 一定名列榜单前茅.作为第五代移动通信网络,5G 技术一直备受瞩目.随着 5G 商用牌照在国内的发放,各大手机厂商也是紧接着推出各款 5G ...

  4. python课堂整理15---map, filter,reduce函数

    一.map函数 处理序列(可迭代对象)中的每一个元素,得到的结果是一个‘列表’(其实是个迭代器),该‘列表’元素个数及位置与原来一样 理解下面这段代码: num_l = [1, 2, 4, 6] de ...

  5. python中的*args和** kwargs区别

    写了几个月的oython了总感觉除了if else for while什么都不太会,看了架构师的代码参数传递总是使用*args,**kwargs,一直搞不太明白,只是模仿着用,最近有时间想系统的学习一 ...

  6. Android的日期选择器

    TimePicker(时间选择器) 方法 描述 Integer getCurrentHour () 返回当前设置的小时 Integer getCurrentMinute() 返回当前设置的分钟 boo ...

  7. Mysql Atm取款机系统模拟案例

    #创建ATM数据库 CREATE DATABASE ATM; #创建用户CREATE USER `ATMMaster` IDENTIFIED BY '1234';GRANT ALL ON ATM.* ...

  8. Selenium浏览器自动化测试框架

    selenium简介 介绍 Selenium [1]  是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 1 ...

  9. 理解SVG中的 viewport,viewBox, preserveAspectRatio

    _ 阅读目录 一:理解viewport 二:理解viewBox 三:理解 preserveAspectRatio 回到顶部 一:理解viewport 该属性表示的是SVG可见区域的大小.或者也可以叫画 ...

  10. Django REST framework的使用简单介绍

    官方文档:https://www.django-rest-framework.org/ GitHub源码:https://github.com/encode/django-rest-framework ...