作用域和垃圾收集

每个函数执行时都会创建自己的作用域,函数内部可以访问外部函数定义的变量和方法,外部函数不能访问内部函数定义的变量和方法。

当执行一个函数访问一个变量时,它会先找自身声明的变量,找不到会找上一层函数的变量,一直找到全局变量上,想象一个大圆套着一个小圆,再套着一个更小的小圆,最小园找变量时他会找他自己里面的,然后找大一些的,然后找最大的那个。

var a=0;
function b(){var a=1;return a;}
alert(b()) //1

函数执行会创建作用域,{}并不会,如for循环 if等

垃圾收集:常见浏览器会使用标记法回收内存,正常你定义一个变量,就会给这个变量分配空间,如果这个变量不再用了,就要这个空间释放出来,否则的话,你一个js文件定义上万个变量估计浏览器会卡死。

在一个函数执行时,定义的全部变量就标记为使用中,当这个函数执行后,再标记为使用完,或者把变量赋值null也会标记它是使用完,然后浏览器每隔一段时间就会来一辆垃圾车,把标记为使用完的空间全部收走。

所以为什么外部函数无法使用内部函数的变量呢,因为内部函数执行后,他的变量就都被释放掉了啊

你可能感兴趣的:(作用域和垃圾收集)