zoukankan      html  css  js  c++  java
  • 从零开始学JavaScript三(变量)

     一、变量

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

    定义变量时要使用var操作符

    如:

    var message;
    /*定义一个名为message的变量,该变量可以用来保存任何值,未初始化的变*量会保存一个特殊的值-undefined
    */

     二、局部变量   

    可以声明变量里同时初始化

    function test(){
        var message='hello';  //定义局部message变量,并初始值为hello
        alert(message);       //将message内容弹出
        }
        test();
    </script>

    错误的写法

    function test(){
        var message='hello';  //定义局部message变量,并初始值为hello
        
        }
        test();
    alert(message);       //错误

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

     三、定义全局变量

    function test(){
       message='hello';  //全局message变量,并初始值为hello
        
        }
        test();
    alert(message);       //hello

    这里因为省略了var,因而message就成了全局变量,这样只要调用过一次test()函数,这个变量就有了定义,就可以在函数外部的任何地方被访问

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

     四、作用域和范围

     

    <SCRIPT  type="text/javascript"> 
    //定义一个输出函数 
    function outPut(s){ 
    document.writeln(s); 
    } 
    //全局变量 
    var i=0; 
    //定义外部函数 
    function outer(){ 
    //访问全局变量 
    outPut(i); // 0 
    //定义一个类部函数 
    function inner(){ 
    //定义局部变量 
    var i = 1; 
    // i=1; 如果用隐式申明 那么就覆盖了全局变量i 
    outPut(i); //1 
    } 
    inner(); 
    outPut(i); //0 
    } 
    outer(); 
    </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>

    结果:0 undefined 1 0

     JS函数体中声明的本地变量在整个函数中都有效,因此在上面代码中var i = 1 ;在inner函数中都有效,实际上显式声明的变量i是在预编译时就已经编译到调用对象中了,不同于隐式声明变量在解释时才被定义为全局变量,只是在调用outPut(i)时,还没有将它初始化变量,此时的本地变量i是未赋值变量,而不是未定义变量,因此输出了undefined。上面的代码等效于下面代码:

    function inner(){ 
    var i; //定义但不赋值 
    outPut(i); //undefiend 
    i=1; 
    outPut(i); //1 
    } 

     

  • 相关阅读:
    jar命令|jdt的简单使用
    国际化程序实现
    泛型接口
    RunTime类
    权限控制
    日期操作类
    异常
    Visual C# 2008+SQL Server 2005 数据库与网络开发―― 3.2 C# 2008多语言的新特性
    Visual C# 2008+SQL Server 2005 数据库与网络开发―― 2.6 创建项目
    Visual C# 2008+SQL Server 2005 数据库与网络开发――3.1.3 C# 2008和.NET Framework 3.5的关系
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4237677.html
Copyright © 2011-2022 走看看