![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
你不知道的javascript
今天长高了没1
这个作者很懒,什么都没留下…
展开
-
javascript没有块级作用域
if(true) { var color = "blue";}console.log(color); //"blue"for(var i = 0; i < 10 ; i++) { doSomething(i);}console.log(i); //10在C、C++或Java中,color会在if语句执行完毕后被销毁,但在JavaScript中,if语句中的变量声明会将变量添加导当前的执行环境(上述两个例子为全局环境)。...原创 2020-07-16 07:07:16 · 233 阅读 · 0 评论 -
词法作用域中的eval()和with()
词法作用域意味着作用域是由书写代码时函数声明的位置来决定的。嵌套的作用域类似为严格包含的嵌套气泡结构。作用域查找从运行时所处的最内部作用域开始,逐级向外进行,直至遇见第一个匹配的标识符为止。这种查找方式将引起“遮蔽效应”,即内部的标识符“遮蔽”了外部的标识符,被遮蔽的标识符除了全局变量可以通过window.a的方式来访问,其余非全局的变量将无法被访问到。(全局变量会自动转换为window对象的属性)存在两种机制可以打破这种规则:eval()function foo(str,a){ eval(原创 2020-05-26 16:02:13 · 188 阅读 · 0 评论 -
javascript引擎LHS查询与RHS查询的区别
先说结论:LHS查询盒子,RHS查询值例如:LHS查询var a = 2;上面这一句赋值语句,对a变量执行的是LHS查询,它的目的是为 =2 的赋值操作找到一个目标,即一个盒子。在编译器遇到 var a 时会询问作用域是否已存在一个叫a的变量,若存在则编译器会忽略该声明继续进行编译,若不存在则会要求作用域在当前作用域中声明一个新的变量并命名为 a。RHS查询console.log(a);上面这一句打印语句,对a变量执行的时RHS查询,因为它的目的是找到a变量内部的值并打印而不是给它进行赋原创 2020-05-26 12:28:17 · 337 阅读 · 0 评论