(2).在函数外部无法读取函数内的局部变量 复制代码 代码如下: <script type="text/javascript"> function parent(){ var m=50; } parent(); alert(m);//报错 m未定义 </script>
注意函数内部声明变量时一定要加var,否则就声明了一个全局变量 复制代码 代码如下: function parent(){ m=50; } parent(); alert(m);//50
//当然在php里更是如此了, 复制代码 代码如下: <?php function parent(){ global $m;//全局 ,定义与赋值要分开 $m=50; } parent(); echo $m;//50 ?> //没global的话,一样会报没定义的错误
有时,需要得到函数内部的的局部变量,就需要变通的方法实现利用js变量作用域的特点,如在函数内部定义子函数,对于子函数来说,父函数就是它的全局,子函数可以访问父函数里的变量(对于整个js代码来说又是局部变量) 复制代码 代码如下: <script type="text/javascript"> function parent(){ var m=50; function son(){ alert(m); } return son; } var s=parent();//将结果保存在全局里 s();//50 </script>
Parent内部所有局部变量对其子函数来说都是可见的,但其子函数内的局部变量对其父函数是不可见的,这就是js特有的链式作用域结构,子对象会一级一级地向上查找所有父对象的变量,父对象的所有变量对子对象都是可见的,反之不成立!上面的son函数就是闭包 有些同学可能这样 复制代码 代码如下: function parent(){ var m=50; function son(){ alert(m); } } parent(); son()//会报 函数son未定义
注意 在javascript里,在函数里声明的函数都是局部的,函数运行完后就释放了 注意这点与php的区别 复制代码 代码如下: <?php function parent(){ function son(){ $m=50; echo $m; } } parent(); son();//输出50 不会报错 ?>