作用域和闭包
1.作用域 作用域其实就代表了变量合法的使用范围。 作用域分为全局作用域、函数作用域和块级作用域。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 var n=999; function f1(){ alert(n); } f1(); // 999 但是,在函数外部自然无法读取函数内的局部变量。 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! function f1(){ n=999; } f1(); alert(n); // 999 2.作用域链 一个变量在当前作用域没有被定义,但被使用了,会向上级作用域,一层层寻找,直至找到为止。 这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。 所有自由变量的查找,是在函数定义的地方,向上级作用域查找,而不是在执行的地方!!!!!! function f1(){ var n=999; function f2(){ alert(n); // n在这个作用域内就是自由变量,999 } } 3.闭包 闭包就是能够读取其他函数内部变量的函数。