javascript作用域

javascript作用域

<html>
 <script type="text/javascript">
 /*作用域
 在js中,函数嵌套是非常普遍的,在函数嵌套中,
 对变量是如何寻找的?
 答:首先在函数内部寻找,如果需找不到,则在外层寻找。
 直到……全局(window)区域.从里往外寻找
 */
  var c=5;
  function t1(){
   var d=6;
   function t2(){
    var e =7;
    alert(c+d+e);
   }
   t2();
  }
 //t1();//18
 function t3(){
   var d=6;
   function t2(){
    var e =7;
     d =3;
    alert(c+d+e);
   }
   t2();
  }
 //t3();//15
 /*声明变量,var的作用
 var 是在函数运行的上下文中,声明一个变量,
 如果不加var,则是一个赋值操作,
 但是不要狭隘的理解为声明了一个全局变量
 */
 //alert(window.d);
 //alert(window.e);
 function t(){
  d=5;//d没有加var,仅仅是一个赋值操作,寻找
  //t域内的函数,如果没找到,继续向外寻找……到window
  //如果window中还没有d,创建d变量并赋值
  var e=6;
 }
 //t();
 //alert(window.d);
 //alert(window.e);
 function  t4 (){
  var d;
  function t2(){
   d=5;
   e=6;
  }
  t2();
 }
 //t4();
 //alert(window.d);//undefined
 //alert(d);// d is not defined
 //alert(e);
 /*
 注意:以window.xxx引用全局变量,寻找不到,
 作为window的属性不存在,返回undefined。
 直接以xxx引用,寻找不到,则报xxx is not defined
 */
 
 var s1=‘g‘;
 function  t5(){
  alert(s1);//g
  alert(s2);//is not defined
  s2 = ‘lo‘;
 }
// t5();
 /*
 在t5中寻找s2,没有找到s2的变量声明,到window上寻找s2的变量声明,
 还是没有找到,报is not defined
 */
 
 function  t6(){
  alert(s1);//g
  alert(s2);//undefined
 var s2 = ‘lo‘;
 }
 t6();
 /*
  解释:
  js代码自上而下执行,但是js代码的整体运行分为:
  词法分析期和运行期
  自上而下执行之前,先有一个词法分析过程。
  词法分析t6函数:
  声明了s2变量,但是没有对s2赋值,只有在运行期才赋值
  因此s2=undefined。
  执行t6函数:
  alert(s1);//g
  alert(s2);//undefined
  s2 = ‘lo‘;
 */
 </script>
</html>

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。