Open Leooonard opened 9 years ago
变量提升大家都知道,那么为什么变量会提升呢?接下去看吧! 先明确几个概念,javascript中存在三种作用域。全局作用域,函数作用域,eval作用域。全局作用域只能是一个。函数作用域可以有多个,并且每次调用一个函数就将创建一个函数作用域(哪怕是反复调用同一个函数)。eval作用域我们稍后再说。(有一点需要注意,所有作用域都是内部能访问外部,相反则不能。)
//猜猜输出? void function(){ console.log(foo) var foo = 1 console.log(foo) function foo(){} console.log(foo) }() //关于这个问题,[查看此文](http://dmitrysoshnikov.com/ecmascript/chapter-2-variable-object/),看AO\VO
相关文章
。。。
这种动态创建作用域的特性让它性能表现变差。
不创建执行上下文,而是在当前作用域下直接创建一个变量。和with语句一个意思。那么问题来了,什么是执行上下文?
执行上下文
变量提升大家都知道,那么为什么变量会提升呢?接下去看吧!
先明确几个概念,javascript中存在三种作用域。全局作用域,函数作用域,eval作用域。全局作用域只能是一个。函数作用域可以有多个,并且每次调用一个函数就将创建一个函数作用域(哪怕是反复调用同一个函数)。eval作用域我们稍后再说。(有一点需要注意,所有作用域都是内部能访问外部,相反则不能。)
执行上下文的两个步骤
执行栈如图
相关文章
再来看看作用域链吧
。。。
回到try catch
这种动态创建作用域的特性让它性能表现变差。
使用window.onerror来代替try catch。