前端基础的一些很重要的知识点

前端基础的一些很重要的知识点

    • 变量提升
    • 关于this出现的场景
    • 什么是闭包

变量提升

  1. 全局作用域:执行栈,在 script 标签内第一层 js 代码
    (1) 如果当前 script 中的全局没有某个变量,这时候还会向上面的 script 中去查找(只会向上去找,默认不会向下找) 有就输出,没有就报错
    (2) 如果有多个 script 标签,上面的 script 中的代码报错,是不会影响下面 script 标签内的代码执行的
    (3) 从作用域链的角度来说,最终会找到 window 下有没有某个属性(var 的情况)
    (4) 多个 script 标签如果都用了 let,那么同样会走 let 特性(不能有重名的变量)
    (5) 使用 var 的时候等同于在 window 下注册了一个属性,并且在没有赋值之前为 undefined , 不过在 chrome 下在变量的上方打印 window 的时候会有属性值结果,要注意的是,显示出来的是骗人的(跟 undefined 走)
    (6) 变量必须加 var 或者 let 来声明,不然在变量没赋值之前访问这个变量就报错

  2. 私有作用域:在函数执行栈中运行代码,函数中的变量和参数,会默认处理在函数内部,不会被外界所干扰;如果函数内的计算或者逻辑处理需要被外界所接受,一般使用 return; 防止全局污染(封闭空间,教科书上说它就是闭包。但是,这样不一定是我们眼中的闭包)

  3. 块级作用域:{} let 、const 识别块级作用域;var 不识别

  4. 作用域链:当前域没有会去它的上级域查找,知道 window 结束,window 都没有就报错

关于this出现的场景

  • 全局中的 this 指向 window
  • 普通定时器中的 this 指向 window
  • 函数调用要看 . 点前面是谁 this 就指向谁 例如:obj.xxx 此时的 this 的指向就是 obj; . 前面没有 this 就指向 window
  • 自执行函数中的 this 指向 window。
  • 构造函数中的 this 指向当前构造函数的实例。
  • 箭头函数中的 this 指向箭头函数声明时 所在作用域中的 this (箭头函数自己作用域中声明的) ;还有就是箭头函数中没有 arguments; 把箭头函数的 this 和 arguments 当做变量来使用就行。
  • 事件函数中的 this 指向当前绑定该事件的元素

什么是闭包

  • 外界所知的闭包:形成不销毁的作用域就是闭包
  • 说说我对闭包的理解:
  • 闭包:函数套函数,子级去使用父级的函数或者变量 并且子函数被外界所引用,此时父级形成闭包环境。父级的参数或者变量,不被浏览器的垃圾回收机制回收,此时 打印父函数的返回值,有个属性叫 Scopes Scopes 下有个 closure 的属性 closure 就是闭包

你可能感兴趣的:(前端基础的一些小技巧)