作用域
------------>作用域
因为javascript编译的过程分为了3步
1.词法分析,也叫单词拆解,比如 var t=2;那么就变成了 var , t ,= , 2;
2.语义分析 比如上面那个就变成了一个抽象树,类似lamda表达式中的数
3.代码生成 将上面生成的数据流转换成对应的机器代码,一般来说就是为上面生成的变量生成内存
总结:变量的赋值操作会执行两个动作,首先编译器会在当前作用域中声明一个变量(如
果之前没有声明过),然后在运行时引擎会在作用域中查找该变量,如果能够找到就会对
它赋值。
------------->查询
1.LHS 也就是一般说的"="左边
2.RHS 等号右边,也就是一般说的源
考虑下面代码:
function foo(a){
var b=a;
console.log(a);
return b+a;
}
foo(2);
上面的代码发生了几次LHS/RHS?
LHS:a=2,b=a -->2次
RHS:foo(),b=a,console,b,a,console.log(a) -->6次
考虑下上面所说的语法分析阶段,那么我们是不是可以说变量在生产之前就已经存在某个作用域中了!!!
------------->嵌套作用域
考虑下面的代码
function foo(a){
console.log(a+b);//6
}
var b=3;
foo(3);
这个就是一个简单的嵌套作用域的例子,我们可以看出在foo的函数作用域中并没有变量b
但是执行foo(3)又没有报错,这就说明b是在全局作用域中找到的
Hold on, everything is possible.