• JavaScript的本来面貌之默认结构


    1,事件队列(异步和同步,异步的宏任务和微任务)
    由于JavaScript底层的单线程,异步是必然。
    异步是主线程对一些特殊任务的处理方式,比如settimeout、Promise。事件队列,英文event loop是专门处理特殊任务的。
    异步又分宏任务和微任务,前者比如settimeout后者比如Promise。
    微任务先于宏任务执行。

    2,字面量和构造函数的变量区别
    使用typeof操作符,变量为构造函数声明的值均为object
    而直接字变量是分字符串、数字和布尔类型的。

    3,变量的存储
    基本数据类型的值直接在栈内存中存储;变量的值是独立的。
    对象(引用数据类型)是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟一个新的空间;而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个变量修改属性是,另一个也会受到影响。

    4,var声明变量和function声明函数的提升
    var 声明变量会发生提升,提升到当前作用域的最前面。function也会提升。
    同样名称的变量和函数,如果变量未被初始化,则function优先。

    5,let的声明变量和const声明变量
    let的变量有块级作用域,const的也有;const如果为对象,可以改变内部属性的值。

    6,数值转换
    if条件会自动进行布尔类型值转换
    关系操作符:
    如果一个数值和字符串比较,先将字符串强制转为数值
    如果都是字符串,按照字符串编码比较
    如果是对象先用valueOf,后可用toString
    相等操作符:
    字符串和数值比较,先转字符串为数值
    对象和非对象,对象先用valueOf,然后是toString

    7,闭包
    闭包是作用域链的保持。

    8,原型继承的原理
    所有的数值,不管是基础类型和引用类型的都有一个私有属性,__proto__连接其上层对象,最终为null。
    构造函数的实例没有原型,但是实例有__proto__,__proto__是连接属性,连接每层的prototype。prototype呈现了JavaScript的内部结构。上面有constructor等属性,实例是构造函数的一份拷贝。
    实例基于构造函数创建,连接靠的还是__proto__。__proto__连接的是原型。

    9,new 操作符发生了什么
    1)首先创建一个空对象
    2)将空对象的赋值给当前作用域的this
    3)执行构造函数逻辑
    4)返回这个对象

    10,垃圾回收机制
    主要关注引用计数。然后人为去除引用,下次回收时候回收变量,节省内存。

    待续……

    1,谷歌浏览器同时支持冒泡和捕获,如何给body元素设置捕获,而给页面中嵌套两个元素设置冒泡,那么点击嵌套的内部元素时候,首先执行body上的事件,也就是捕获,而后到了事件对象元素在进行冒泡事件。

    2,对象的继承:对象的继承的最理想模式是寄生组合式继承,常用的是组合式继承,组合式继承利用的是call方法继承属性赋值,父实例赋值给子构造函数原型继承原型。

  • 相关阅读:
    扩展方法使用
    mac学习笔记:brew 安装nginx
    Mac SVN 命令行
    mac终端命令大全
    mac学习笔记之:使用brew安装软件
    Linux学习笔记之更新yum安装最新Nginx+Php
    pyenv快速入门
    pycharm配置robotframework环境(mac版)
    macOS的zsh和bash切换
    robotframework windows环境和mac环境安装教程
  • 原文地址:https://www.cnblogs.com/zhensg123/p/12442188.html
Copyright © 2020-2023  润新知