2020.4.25 Javascript精进

发布于 2020-04-25  43 次阅读


Table of Contents

把指针定义删除

闭包:

  • 原理:
    • 内部函数被保存到了外部,一定会生成闭包
    • 因为内部函数会拿到外层[[scope]]的引用
  • 缺点:
    • 闭包容易造成内存泄漏(该释放的不释放)
    • 内存泄漏:占用的内存多了可以使用的就少了
  • 解决缺点
    • 添加一个立即执行函数,里面执行代码
  • 闭包的应用
    • 累加器 就是闭包实现的
    • 缓存:就是一种存储结构
    • 封装;属性私有化
  • 立即执行函数

    • 表达式(执行)

      • 只有表达式可以被执行符号(小括号)执行
      • 能被执行符号执行的表达式,函数的名字就会被忽略(变成了立即执行函数)
      • +,-,!,=,与,或,都可以把函数变为立即执行函数(放弃了函数名字)
      • ,也是一个运算符,返回后面的值
      • https://blog.csdn.net/weixin_33861800/article/details/92056387
    • 用处:

      • 函数都有作用域
      • 用来初始化一些值
      • 用来处理一些数据,只要返回值
    • 语法:

      • (function(){})(参数)建议使用
      • (function(){}())
      • 一般都要接收返回值
    • 特性:

      • 执行完毕就被释放
      • 避免污染全局变量
  • 对象

    • JavaScript对象增加删除方法

      • 1.在函数内部定义
      • 2.对象.方法 = func
      • 3.删除一个对象 delete
    • 对象创建的方法

      • 1.对象字面量

        • var obj = {} plainObject 对象字面量/对象直接量
      • 2.构造函数

        • new 一个函数 ,
          • 如果没有返回值,就是返回this
          • 这个函数返回值如果是字面量,就忽略该值
          • 如果返回引用值,this被替换为返回的引用值
        • 系统自带的构造函数(Array Number)
          • var obj = new Object();
          • 写法上没有什么区别
        • 自定义的构造函数
          • 构造函数和java等的构造函数意义不一样
          • 构造函数一般是大写开头
          • 和函数没有任何区别,就是需要new
        • new构造 函数三步(隐式三步转换)
          • var this = {}
          • 把函数内参数赋值
          • return this
    • 包装类

      • Number() Boolean() Number()
      • 类似java的装箱操作
      • 原始值被相应的对象包装起来
      • 比如调用length,原始值被包装起来
  • 4.扩展延伸知识

    • python中的函数和JavaScript的函数不同

      • 因为python是缩进,所以不能直接把函数定义给数组,要把定义的函数名,给数组
      • 可以给数组lambda函数
    • javascript使用单引号还是双引号

      • php没有双引号,所以最好使用单引号
    • JavaScript对象与java对象的区别

      • 创建可以添加任何属性,删除属性
    • typeof六个值

      • String Number Boolean Object undefined function,symbol ES6新加入
    • 变量提升过程

      • 第一步创建AO对象,(AO = {})Activation Object(执行上下文)
      • 第二步找形参和变量声明作为AO对象的属性,值都是undefined(AO = {a :undefined} )
      • 第三步将实参和形参相统一
      • 第四步把函数声明赋给AO对象里对应的属性
      • 预编译不止发生在函数中,也发生在全局中,省略第三步,生成的对象是GO(Global Object)
      • 在执行的时候,变量自动赋值,函数要判断是否被调用
      • 只要有方法和变量重名,那么这个值一定是方法,后定义的覆盖先定义的
    • function(){}(1,3,4)执行结果是
      • 什么也不输出,
    • parseInt(3,2)的含义
      • 二进制的3,转换为十进制

    5.知识内容个人梳理

    • 手写几个作用域链
      function test(){
        var test = 100;
        function a(){}
        function b(){}
      }

    6.今天都复习了之前的什么内容