学习重点知识总结
 
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. pyqt 主程序运行中处理其他事件(多线程的一种代替方式)

    一.实验环境 1.Windows7x64_SP1 2.Anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 4.通过Anacond ...

  2. vue 的基本语法和常用指令

    什么是vue.js Vue.js是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于Wee ...

  3. sqlserver2014创建数据库时,错误提示如下:尝试打开或创建物理‘c:\数据库\db.mdf’时,Create File遇到操作系统错误5(拒绝访问)

    CREATE DATABASE test1   ON  PRIMARY ( NAME =test1, FILENAME='C:\Program Files\test1.mdf',SIZE=10240K ...

  4. 《C# 语言学习笔记》——C# 简介

    1 什么是.NET Framework .NET Framework 是Microsoft为开发应用程序而创建的一个富有革命性的新平台. 1.1 .NET Framework 的内容 .NET Fra ...

  5. HTML--CSS样式表--格式与布局

    一:position:fixed 锁定位置(相对于浏览器的位置),例如有些网站的右下角弹窗 例如: <head> <title>网页标题</title> <s ...

  6. linux初学者-系统服务的控制

      linux系统中系统服务的控制是比较重要的一部分,这也直接影响到计算机的使用,以下将会介绍一些系统服务的控制. 1.系统服务命令 系统的初始化程序是系统开始的第一个进程,pid为1.可以通过以下命 ...

  7. mongodb数据库常用操作的整理

    这是个人在项目中抽取的代码,自己写的utils的通用模块,使用的框架是tronado,包括了数据库的认证,以及增删改查排序,如有特别需要可以联系我或者自己扩展,刚学python不久,仅供参考,例子如下 ...

  8. python requests、xpath爬虫增加博客访问量

    这是一个分析IP代理网站,通过代理网站提供的ip去访问CSDN博客,达到以不同ip访同一博客的目的,以娱乐为主,大家可以去玩一下. 首先,准备工作,设置User-Agent: #1.headers h ...

  9. 逆向MFC程序

    目录 @ 1 MFC执行流程 1.1 环境支持 1.2 分析 1.3 实践探索 1.3.1 创建一个MFC程序 1.3.2 下关键断点并调试 1.4 转向MFC库源文件中观测 2 逆向 2.1 特征码 ...

  10. 机器学习经典分类算法 —— k-近邻算法(附python实现代码及数据集)

    目录 工作原理 python实现 算法实战 约会对象好感度预测 故事背景 准备数据:从文本文件中解析数据 分析数据:使用Matplotlib创建散点图 准备数据:归一化数值 测试算法:作为完整程序验证 ...