JavaScript深入浅出-作用域
全局.函数,eval
var a=10;//全局作用域
(function(){
var b=20;
})();
console.log(a);//10
console.log(b);//error, b is not defined
for(var item in {a:1,b:2}){
console.log(item)
}
console.log(item)// item still in scope
eval('var a=1; ');
JavaScript无块级作用域,只有函数作用域.如 匿名立即执行作用域
作用域链
function outer2(){
var local2=1;
function outer1(){
var local=1;
}
outer1();
}
var global3=1;
outer2();
function outer(){
var i=1;
var func=new Function('console.log(typeof i)');
func();//undefined
}
outer()
在outer1函数中可以访问到 outer2,global用new Function去构造一个函数 实际上这个函数的作用域是全局作用域而非当前函数的作用域
利用函数作用域封装
(function(){
//do sth
var a,b;
})();
!function(){
// do sth
var a,b;
}