全局.函数,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; 
}