Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量:
1 var n=999; 2 function f1(){ 3 alert(n); 4 } 5 f1(); // 999
但是,在函数外部自然无法读取函数内的局部变量
1 function f1(){ 2 var n=999; 3 } 4 alert(n); // error
注:函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引 用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被GC回收。