JavaScript变量详解

变量是一个和数值相关的名字。有了变量,就可以在程序中存储和操作数据了。

例如:下面的一行JavaScript代码将数值2赋给了一个名为i的变量:

i=2;

  下面的代码将3加到i上,然后把结果赋给了一个新的变量sum。

var sum=i+3;

 

一、变量的类型

JavaScript和Java与C这样的语言之间存在一个重要的差别,那就是JavaScript是非类型(untype)的。这就意味JavaScript的变量可以存放任何类型的值,而Java和C的变量都只能存放它所声明了的特定类型的数据。

例如,在JavaScript中,可以先把一个数值赋给一个变量,然后再把一个字符串赋给它,这样完全合法。

i=10;
i="ten";

在C、C++、Java等其他强语言类型中,上面的代码都是不合法的。

 

二、变量的声明

在JavaScript程序中,在使用一个变量前,必须先声明它。变量是使用关键字var声明的,如下所示:

var i;
var sum;

也可以使用一个var关键字声明多个变量:

var i,sum;

而且还可以将变量声明和变量初始化绑定在一起:

var message="hello";
var i=0,j=0,k=0;

*重复的声明和遗漏的声明

使用var语句多次声明同一个变量不仅是合法的,而且也不会造成任何错误。如果重复的声明有一个初始值,那么它担当的不过是一个赋值语句的角色,例如:

var sum=10;
var sum=20;
alert(sum);     //sum=20

如果尝试读一个未声明的变量的值,JavaScript会生成一个错误。如果尝试给一个未用var声明的变量赋值,JavaScript会隐式声明该变量。但是要注意,隐式声明的变量总是被创建为全局变量,即使该变量只在一个函数体内使用。局部变量是只在一个函数中使用,要防止在创建局部变量时创建全局变量,就必须在函数体内使用var语句。无论是全局变量还是局部变量,最后都使用var语句创建。

例:

function total()
{
   prise=100;    
}
total();
alert(prise);  //输出100

 

三、变量的作用域

1、变量的作用域是程序中定义这个变量的区域。变量的作用域分为:全局作用域及局部作用域。

  全局作用域的的作用是全局性的,在JavaScript代码中,它处处都有定义。

  局部作用变量是在函数之内声明的变量,它只在函数体内部定义。作用域是局部的,函数的参数也是局部变量。

    在函数体内部,局部变量的优先级比同名的全局变量高,如果给一个局部变量或函数的参数声明的名字与某个全局变量的名字相同,那么就有效地隐藏了这个全局变量,例如:

var scope="global";     //定义全局变量
function checkscope()
{
    var scope="local";      //定义与全局变量相同的局部变量
    document.write(scope);     //使用的是局部变量
}
checkscope();          //输出 "local"

2、没有块级作用域

这个在JavaScript是需要注意的,和C、C++及Java不同,JavaScript没有块级作用域。函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。下面例子中,变量i,j和k的作用域是相同的,它们三个在整个函数体中都有定义。如果这段代码是用C、C++或Java编写,情形就不是这样了。

function test()
{
  var i=0;
  if(typeof o=="object"){
    var j=0;
    for(var k=0;k<10;k++){
      document.write(k);
    }
    document.write(k);
  }
  document.write(j);
}

这一规则产生了惊人的结果,下面的代码说明了这一点

var scope="global";
function f(){
  alert(scope);      //输出 "undefined",不是"global"
  var scope="local";  
  alert(scope);      //输出"local"
}
f();

可以有的人会认为对alert()的第一次调用会显示出"global",因为声明局部变量的var语句还没有被执行。但是,由于这个作用域规则的限制,输出的并不是"global"。局部变量在整个函数体都是有定义的,这就意味着整个函数体中都隐藏了同名的全局变量。虽然局部变量在整个函数体中都是有定义的,但是在执行var语句之前,它是不会被初始化的。因此上面的例子中,函数f和下面的函数等价:

function f(){
   var scope;          //局部变量在函数开头声明
  alert(scope);      //此处该变量有定义,但值仍未"undefined"
  scope="local";   //现在初始化该变量,并给它赋值
  alert(scope);      //此处该变量具有值
}

这个例子说明了为什么将所有的变量声明集中起来放置在函数的开头是一个好的编程习惯。

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