fn()();//执行fn()得到函数c,再c()执行第二个alert
var a = 0;
function fn(){
alert(a);
var a = 3;
function c(){
alert(a);
}
return c;
}
/*
1. 定义
var a;
funtion fn(){...}
2. 执行
fn() ===> 局部作用域
1. 定义
var a;
funtion c(){...}
2. 执行
alert(a);//undefined
a = 3;
return c;
fn()() ===> 局部作用域
1. 定义
2. 执行
alert(a); //3
*/
/*
1. 由于函数的执行在定义全局变量a=0之前,所以第一个alert为undefined
2. 函数在哪定义的作用域就在哪,而不是在哪执行作用域在哪
c()在function()中定义的,因此c()的作用域在function()这个局部作用域中
*/
var a = 5;
function fn(){
var a = 10;
alert(a);
function b(){
a ++;
alert(a);
}
return b;
}
var c = fn();//10
c();//11
fn()();//10 11 这个fn执行产生的作用域与第一个fn的作用域不同
c();//12 //这个c是第一个fn产生的,与第一个fn返回的c是同一个作用域
总结: 函数在哪定义,其作用域就在哪;相同函数多次执行互不干扰