1. LHS和RHS查询。
他们都是由引擎进行的,取决于变量出现在赋值操作的左侧还是右侧。
如果查找的目的是对变量进行赋值,那么就会使用LHS查询; 如果目的是获取变量的值,就会使用RHS查询。
2. 变量提升,函数优先。
1)首先定义声明是由引擎在编译阶段进行的;赋值会被停留在原地等待执行阶段。
2)函数声明会被提升,但是函数表达式却不会被提升(包括具名的函数表达式)。
例1:
foo(); //TypeError foo为undefined,还不能被当做函数执行
bar(); //ReferenceError
var foo = function bar(){
//....
};
其相当于:
var foo;
foo();
bar();
foo = function(){
var bar = self;
//...
}
例2:
foo(); //3
function foo(){ console.log(1); };
var foo = function(){ console.log(2); };
function foo(){ console.log(3); };
foo(); //2
网友评论