javascript变量机制
2018-06-07 本文已影响0人
xhbisme
Q:为啥我不写 var 我的变量就成了全局的了?
大家都知道,js中变量生命用var,但是,为什么不写var的时候,我们的变量在全局都能访问到呢?带着这个问题,我们继续探究。
原来,和js变量机制有关系,一切都是js在搞鬼。因为js怕你用的时候找不到这个变量。为啥js会有这种操作?
JavaScript变量是按照作用域链来进行查找的。如果不写var,作用域链查找会将变量隐式提升至全局。
那,作用域链是怎样查找的呢?其实明白了什么叫作用域链,就明白了它是怎么查找的了。
首先,当JavaScript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文。包括:变量对象(Variable object,VO),作用域链(Scope chain),this。当查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面上的父级)执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。这样由多个执行上下文的变量对象构成的链表就叫做作用域链。