日常笔记
函数的提升六种
js引擎在解析javascript代码是会对var开头和function开头的语句块进行提前处理
1.函数的提升
2.变量的提升:只是声明的提升,不会赋值的提升
3.当函数声明名与变量名重复时:函数提升变量不会提升
4.函数表达式不提升
5.提升不会超出作用域范围
函数进阶正常情况下:不包括变量提升
1.如果两个变量名重复,后边会覆盖前边
2.如果两个函数声明重复,后边会覆盖前边
3.如果两个函数表达式重复,离的近的调用(就近原则)
4.如果函数声明和函数表达式重复,表达式覆盖声明,
5.如果函数声明与变量名重复,变量名覆盖函数(函数声明)
6.如果函数表达式与变量名重复,后边覆盖前边
函数表达式不能提升,变量比声明优先级高,表达式比声明优先级高,变量和表达式,后边会覆盖前边
公式:
变量名前边 < 变量名后边
函数名前边 < 函数名后边 < 函数表达式 (就近原则)
函数表达式前边 < 变量名后边
函数名 < 变量名
效 果 图
扩展:
var let 和const的区别
var没有作用域的问题,可以在任何地方赋值
let 有作用域问题,局限于花括号,可以被修改
const只能声明常量,声明之后不能被赋值,或修改
this的指向问题(函数中this指向)
- 在构造函数中,this指向实例化对象
- 在对象函数中,this指向当前对象
- 在普通函数中,this指向window
- 在事件函数中,this指向事件源
this指向对象,对象指向特征及行为 - 在定时器函数中,this指向window
- 在实例化函数调用函数,this指向实例化对象,在原型对象中调用函数,this指向原型对象
- 如果数组的元素是函数,在此函数中this指向当前的数组
- 在原型的函数中、如果实例化对象调用该函数this指向实例化对象
- 如果原型对象调用该函数,this执行原型对象
- 箭头函数没有this,箭头函数永远指向父级
扩展
原型对象的指向问题
原型对象
任何一个函数