理解js中的闭包

来源:互联网 发布:mac mini 外加散热器 编辑:程序博客网 时间:2024/03/28 18:27
一、变量的作用域
变量的作用域无非就是两种:全局变量和局部变量。
javacript语言的特殊之处,就在于函数内部可以直接读取全局变量。

js代码:

var n = 9;function f1() {alert(n);}window.onload = f1(); //弹出窗口显示9
另一方面,在函数外部自然无法读取函数内的局部变量。

js代码:

function f1() {var n = 9;}alert(n); //ReferenceError: n is not defined

这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,实际上声明了一个全局变量?//去掉var后还是相同结果

js代码:

  function f1(){    n = 9;  }  f1();  alert(n); //弹出个窗口显示9
--------------------------------------------------------------------------------------------------------

二、如何从外部读取局部变部变量?

出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。

那就是在函数的内部,再定义一个函数。

js代码:

function f1() {n = 9;function f2() {alert(n);//没有弹出窗口,访问不了?}}window.onload = f1();
在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的


0 0