从头开始学JavaScript (二)——变量及其作用域-阿里云开发者社区

开发者社区> 开发与运维> 正文

从头开始学JavaScript (二)——变量及其作用域

简介: 原文:从头开始学JavaScript (二)——变量及其作用域 一、变量 ECMAscript变量是松散型变量,所谓松散型变量,就是变量名称可以保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符。
原文:从头开始学JavaScript (二)——变量及其作用域

一、变量

ECMAscript变量是松散型变量,所谓松散型变量,就是变量名称可以保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符。

定义:var firstDemo;

二、变量的作用域

2.1基本概念

使用var 定义变量:定义该变量的作用域的局部变量,这种定义变量的方法也被成为显式声明。

这么说不理解的话可以看看下面这个简单粗暴的例子:

test();
function test(){
var firstDemo="hello";//定义局部变量
alert(firstDemo);//hello
}
 test();
 function test(){
    var firstDemo="hello";//定义局部变量firstDemo            
 }    
 alert(firstDemo);//报错,firstDemo is not define

由以上两个例子可以看出,如果在一个函数中使用var 定义一个变量,那么该变量在函数退出后会被销毁。

省略var 定义变量:只要调用一次定义该变量的函数,全局范围内都可访问该变量。这种定义变量的方法也被成为隐式声明

 <script type="text/javascript">
        test();
        alert(firstDemo);   //hello 
        function test(){
             firstDemo="hello";            
        }        
    </script>

tips:显式声明的变量是在预编译时就已经编译到调用对象中了,(例如var t=1;预编译时执行var t;解释时执行t=1;)不同于隐式声明变量在解释时才被定义为全局变量。

弄清楚变量的作用域,可以帮助我们思考如何合理声明变量,这样既减小了不必要的内存开销,同时能很大程度地避免变量重复定义而覆盖先前定义的变量所造成的麻烦。

2.2作用域分析

<script type="text/javascript">
    function demoFunction(s){ 
        document.writeln(s) 
    } 
    var i=0; //定义全局变量 
    function test(){ 
        demoFunction(i); 
        function innerFunction(){ 
            var i = 1; //定义局部变量 
            demoFunction(i); 
        } 
        innerFunction(); 
        demoFunction(i); 
   } 
   test();    
</script>

输出结果:0 1 0

<script type="text/javascript">
  function demoFunction(s){
    document.writeln(s)
}

  var i=0;
  function test(){
    demoFunction(i);
    function innerFunction(){
      demoFunction(i);
      var i=1;
    demoFunction(i);
    }
    innerFunction();
    demoFunction(i);
}
test();

</script>

输出结果:

A、0 0 1 0

B、0 undefined 1 0

C、0 报错i is not defined 

各位可以猜测一下结果是哪一个,原因会在留言里详解。

 

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章