Fork me on GitHub

从零开始学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 
} 

 

 

 

posted @ 2015-01-20 23:01  森林森  阅读(456)  评论(0编辑  收藏  举报