美文网首页前端让前端飞
变量提升 & this指向

变量提升 & this指向

作者: Mr哲 | 来源:发表于2018-02-11 16:09 被阅读7次

    变量提升

    JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
    JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

    定义:变量提升

    需要注意的几点

    • 不可跨<script>标签,最高到script顶部
    • 块级作用域提升到函数顶部
    • 函数内部最高提升到函数顶部
    • 被提升的只是定义,而不是初始化赋值
    var a = 5
    console.log(a+b)
    var b = 1
    

    会报错,因为只有变量定义被提升,而赋值操作并不会,错误信息为b为定义

    由于最近模块化开发,统一一下变量头部定义比较好,而且方法尽量小便于测试

    this 指向

    1. 这个是个难点,之前的经验是看函数调用,在没有call,apply,bind的情况下,就看调用时的环境就好了,定时器和块作用域全局调用,属于全剧函数,也指向window

    ps:超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined。 ——《JavaScript高级程序设计》

    1. bind(),call(),apple()的区别:
    • bind() 来实现在指明函数内部 this 指向的情况下去调用该函数(函数不执行), 换句话说, bind() 允许我们非常简单的在函数或者方法被调用时绑定 this 到指定对象上;如果我们将包含 this 的方法赋值给一个变量, 那么 this 的指向也会绑定到另一个对象上
    • call & apply:传入的第一个参数为目标函数中 this 指向的对象(函数执行),apply 和 call 的用法几乎相同, 唯一的差别在于当函数需要传递多个变量时, apply 可以接受一个数组作为参数输入, call 则是接受一系列的单独变量.并且不能用于es6的箭头函数

    3.箭头函数重的this:箭头函数内部的this是词法作用域,由定义环境决定,箭头函数中this总是指向外层调用者。

    相关文章

      网友评论

        本文标题:变量提升 & this指向

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