美文网首页
你不能不知道的Js

你不能不知道的Js

作者: Lethe35 | 来源:发表于2020-07-19 16:53 被阅读0次

编程语言&脚本语言

编程语言:有变量有函数有数据结构,可以进行基本的运算。(JS,Java…)
脚本语言:CSS,HTML

1.浏览器组成

shell部分
内核部分 渲染引擎,js引擎,其他模块

2.主浏览器(有一定的市场份额>3%左右;有独立研发的内核)及其内核

Chrome:Webkit/blink
Firefox:Gecko
IE: Trident
Opera:Presto
Safari:Webkit

3.js逼格:

解释性语言(都一行翻译一行成机器码,php,python ----跨平台)(c语言,c++是编译性语言-全读完,一次性编译成某种类型文件)(JAVA是先通过javac编译成.class文件,然后通过jvm翻译成机器码,可跨平台)
单线程 就是同一时间只能一个方块移动,但是我们看到两个同时移动的方块该怎么解释呢?轮转时间片:

image.png
(第一个方块挪了1ms甚至是更小的时间单位,接着换第二个方块挪1ms,一直下去,因为时间差太小,肉眼察觉不出)
ECMA标注

4.JS三大部分

ECMAScript、DOM、BOM

5.如何引入js

  • 页面内嵌<script></script>标签
  • 外部引入<script src="location"></script>
    为符合Web标准(w3c标准中的一项)结构、样式、行为相分离,通常会采用外边引入

6.数据类型

原始值 (栈数据)赋值就是拷贝
Number、String、Boolean、undefined、null
引用值 (堆数据)
Array、Object、Function、date、RegExp ……

7.js语句基本规则

  • 语句后面要用分号结束;
  • js语法错误会引发后续代码终止,但不会影响其他js代码块;
  • 书写格式要规范,“= + / -”两边都应该有空格

8.运算操作符

  • “+” 数学运算,字符串连接;任何数据类型加字符串都等于字符串;
  • “-”,“*” ,“/” ,“%”,“=”, “()”
  • “=”优先级最弱,“()”优先级较高
  • “++”,“--”,“+=”,“-=”,“/=”,“*=”,“%=”
    赋值的顺序 自右向左,运算的顺序 自左向右

9.比较运算符

  • “>”,“<”,“==”,“>=”,“<=”,“!=”
  • 比较结果为Boolean值
  • 字符串比较的是ASCII码

10.逻辑运算符

  • “&&”, “||”, “!”,
  • 运算结果为真实的值

10.被认定为false的值

  • undefined,null,NaN,"",0,false
  • NaN === NaN 结果为false

11.循环

image.png

12. wiondow.xxx = xxx 与 return xxx的区别

拿闭包来说,内部函数被return出来之后必须要拿个全局变量保存;但对于window.xxx的xxx来说,它已经是全局变量了,所以把return xxx换成window.xxx=xxx是一样的效果,非要说个区别的话就是xxx不用再用全局变量保存了


image.png

12. ?: 和 ?? 操作符

?: 可选链式操作符
?? 空值合并符(js新特性)

let c = a ?? b;
// 等价于
let c = a !== undefined && a !== null ? a : b;

13. new实例化对象都做了什么?

  • 调用函数
  • 自动创建一个对象
  • 把创建出来的对象和this进行绑定
  • 如果构造函数没有返回值,则隐式地返回this对象

14. this在不同调用环境下的指向

  • 事件调用环境:谁触发,指向谁
  • 全局环境:浏览器 ->window;node ->module.exports;
  • 函数内部
    1)【this最终指向的是调用它的对象】
    2)【函数被多层对象所包含,如果函数被最外层调用,this指向的也只是它上一层的对象】
    3)【构造函数中的this指向的是实例对象】
    4)【如果构造函数中有return,并且return的值是对象,则this指向返回的对象;如果return的不是对象,则this保持原来的规则(这里null比较特殊)】
  • 箭头函数:箭头函数本身没有this和arguments[],在箭头函数中引用的this实际上调用的是上一层作用域的this

15. [[scope]]是个啥?

  • 函数创建时生成的一个js内部的隐式属性
  • 函数存储作用域链的容器
    作用域链GO/AO GO -> 全局执行期上下文;AO ->函数执行期上下文。AO是一个即时的存储容器,函数执行完就会销毁,每次执行都会生成一个新的AO
    ⭐每个函数在被定义时的作用域链中都包含GO,在函数预编译(执行前一刻)会生成一个AO,存储在函数作用域链的最顶端,然后在函数中查找变量都是自顶向下的
    ⭐当外部函数a包含内部函数b时,当a函数执行,b函数就会被定义,此时b函数的作用域链就是就是a函数的作用域链。当内部函数b被外部函数return到外部并被全局变量接收保存时就形成了闭包,a函数执行完a函数的作用域链会被销毁,但是在a执行完时b函数被return到全局,b还拽着a函数的作用域链,所以闭包会导致原来的作用域不释放,过度的闭包可能会导致内存泄漏或加载缓慢
    GO:找变量声明 -> 找函数声明 -> 执行(GO=window)
    AO:找形参和变量声明 -> 实参赋值给形参 -> 找函数声明、赋值 -> 执行

相关文章

  • 你不能不知道的Js

    编程语言&脚本语言 编程语言:有变量有函数有数据结构,可以进行基本的运算。(JS,Java…)脚本语言:CSS,H...

  • JS原型

    最近一直在理解JS的原型------《你不知道的JS》--------《JS设计模式》 里面都讲JS的原型运作方式...

  • 你不知道的JS

    NaN == NaN; // false "0" == null; // false "0" == undefin...

  • 你不知道的js

    原型 构造器(函数)也是对象,也可以赋值属性,函数本身有个property属性指向对象原型 构造器生成的对象可以访...

  • 基础

    JS 你不知道的 js 上中下 JavaScript 设计 模式 与 开发 实践 JavaScript 语言精粹 ...

  • JS 中你不知道的 this

    this 误区 this 既不指向函数自身也不指向函数的词法作用域。this 实际上是在函数被调用时发生的绑定,它...

  • js -- 你不知道的addEventListener

    借《你不知道的JavaScript》书的名气,顾取《你不知道的addEventListener》标题 先监听几个事...

  • 你不知道的JS(一)

    1、RHS(Right-Hand-Side)查询与LHS(Left-Hand-Side)查询 “RHS 查询与简单...

  • 你不知道的js温习

    js循环双值 typeof 妙用,防范机制,不会导致未定义的变量报错 而是返回undefined 字符串方法 借用...

  • 你不知道的js技巧

    Object.defineProperty(obj,"size",{}) 对某个对象的属性进行额外扩展设置需要三个...

网友评论

      本文标题:你不能不知道的Js

      本文链接:https://www.haomeiwen.com/subject/xfxbbftx.html