JavaScript学习(5.2):声明语句

来源:互联网 发布:狸窝视频转换器 知乎 编辑:程序博客网 时间:2024/05/10 00:12
5.3 声明语句
     var和function都是声明语句,它们声明或定义变量或函数。这些语句定义标识符(变量名和函数名)并给其赋值,这些标识符可以在程序的任何地方使用。声明语句本身什么也不做,但它通过创建变量和函数,可以更好的组织代码的语义。

5.3.1 var
     var语句用来声明一个或者多个的变量,语法如下:
          var name_1[ = value_1][,.......,name_n[ = value_n]]
     关键字var之后跟随的是要声明的变量列表,列表中的每一个变量都可以带有初始化表达式,用于指定它的初始值:

var i;  //定义一个简单的变量
var j = 0; //定义一个带有初始化的变量
var p ,q ; // 两个变量
var greeting = "hello" +name ; //复杂的初始化表达式
var x = 1, y = 2, r ;// 多个变量
var z = 2,    //更多变量 ,每个变量独占一行
    f = function(x){return x*x;},
    y = f(x);

     如果var 语句出现在函数体内,那么它定义的是一个局部变量其作用域就是这个函数。如果在顶层代码中使用了这个var语句,它声明的是全局变量,在整个JavaScript程序中都是可见的。 全局变量是全局对象的属性,但是和其他全局对象的属性不同的是,var声明的变量是无法通过delete删除的。
    如果var语句中国的变量没有指定初始化表达式,那么这个变量的值初始为undefined。变量在声明它们的脚本或函数中都是有定义的,变量声明语句会被提前至脚本或者函数的顶部,但是初始化的操作还在原来var语句的位置执行,在声明语句之前的变量的值是undefined。
     var语句同样可以作为for循环或者for/in循环的组成部分:
for(var i = 0; i < 10; i++) console.log(i);
var o = [2,3,4,5];
for(var i in o) console.log(i);


5.3.2 function
     关键字function用来定义函数。函数定义也可以写成语句的形式:
var f = function(x){return x*x;}    //函数声明语句
function q(x){return x*x;}      //函数定义表达式
     函数声明的语法如下:
     function funcname([arg1[ , arg2[ ... , argn]]]){
           statements
     }
     funcname是要声明的函数的名称的标识符,函数名之后的圆括号中是参数列表,参数之间使用逗号隔开。当调用函数时,这些标识符则指代传入函数的实参。
     函数体是由JavaScript语句组成的,语句的数量不限,且用花括号括起来。在定义函数时,并不执行函数语句,它和调用函数时待执行的新函数对象相关联。
     函数声明语句通常出现在JavaScript代码的最顶层,也可以嵌套在其他函数体内。但在做嵌套时,函数声明只能出现在所嵌套函数的顶部。也就是说,函数定义不能出现在if语句、while循环或其他语句中。因为函数声明位置的这种限制,ECMAScript标准规范并没有把函数声明归类为真正的语句。有一些JavaScript实现的确允许在出现语句的地方都可以进行函数声明,但是不同的实现在细节处理方式上有很大的差别,因此将函数声明放在其他的语句内的做法并不具备可移植性。

     尽管函数声明语句和函数定义表达式包含相同过的函数名,但两者仍然不同。两种方式都创建了新的函数对象,但函数声明语句中的函数名是一个变量名,变量指向函数对象。和通过var声明变量一样,函数定义语句中的函数被显式的提前到了脚本或函数的顶部。因此它们在整个脚本和函数内都是可见的。使用var的话,只有变量声明提前了--变量的初始化代码仍然在原来的位置。然而使用函数声明语句的话,函数名称和函数体均提前:脚本中的所有函数和函数中所嵌套的函数都会在当前上下文中其他代码之前声明,也就是说,可以在声明一个JavaScript函数之前调用它。
    和var语句一样,函数声明语句创建的变量也是无法删除的,但是这些变量不是只读的,变量值可以重写。
0 0