//例子1:
var a = 10;
function a1(){
console.log(a);
}
function a2(){
var a = 20;
a1();
}
a2(); //10
//例子2:
var a = 10;
function a1(){
console.log(a);
}
function a2(y){
var a = 20;
y();
}
a2(a1); //10
//例子3:
function a2(y){
var a = 20;
function a1(){
console.log(a);
}
return a1
}
var a = 10;
var b = a2();
b(); //20
说明函数作用域是其声明定义时所在作用域,与运行调用时所在的作用域无关
<script>
var a = 10;
var c = {
m:20,
n:30
}
function a1(ra,c){
// 传入的a是原始类型,值复制,a这个形参相当于在这个函数内部
//var ra;ra=1;是函数的内部变量
return function(){
return ra++ +'---'+c.m++
}
}
var b = a1(a,c);
console.log(b()); //10---20
console.log(b()); //11---21
console.log(b()); //12---22
console.log(a); //10
console.log(c.m); //23
</script>
通过闭包,ra的状态被保留,所以每次调用b()函数都是在上一次的基础上进行计算,ra会被保存在内存中