变量提升
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
定义:变量提升
需要注意的几点
- 不可跨<script>标签,最高到script顶部
- 块级作用域提升到函数顶部
- 函数内部最高提升到函数顶部
- 被提升的只是定义,而不是初始化赋值
var a = 5
console.log(a+b)
var b = 1
会报错,因为只有变量定义被提升,而赋值操作并不会,错误信息为b为定义
由于最近模块化开发,统一一下变量头部定义比较好,而且方法尽量小便于测试
this 指向
- 这个是个难点,之前的经验是看函数调用,在没有call,apply,bind的情况下,就看调用时的环境就好了,定时器和块作用域全局调用,属于全剧函数,也指向window
ps:超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined。 ——《JavaScript高级程序设计》
- bind(),call(),apple()的区别:
- bind() 来实现在指明函数内部 this 指向的情况下去调用该函数(函数不执行), 换句话说, bind() 允许我们非常简单的在函数或者方法被调用时绑定 this 到指定对象上;如果我们将包含 this 的方法赋值给一个变量, 那么 this 的指向也会绑定到另一个对象上
- call & apply:传入的第一个参数为目标函数中 this 指向的对象(函数执行),apply 和 call 的用法几乎相同, 唯一的差别在于当函数需要传递多个变量时, apply 可以接受一个数组作为参数输入, call 则是接受一系列的单独变量.并且不能用于es6的箭头函数
3.箭头函数重的this:箭头函数内部的this是词法作用域,由定义环境决定,箭头函数中this总是指向外层调用者。
网友评论