Javascript核心读书有感之语句(2)

在javascript中,当希望多条语句被当做一条语句使用时,使用符合语句来替代。空语句(empty statement)则恰好相反,它允许包含0条语句。空语句如下所示:

;//分号

javascript解释器在执行空语句时显然不执行任何动作,但实践证明:当创建一个具有空循环体的循环时,空语句有时是很有用的,例如下面的for循环

复制代码 代码如下:


           //初始化一个数组a
            for (i = 0; i < a.length; a[i++] = 0);

在这个循环中,所有的操作都在表达式a[i++]=0中完成,这里并不需要任何循环体。然而javascript需要循环体中至少包含一条语句,因此这里只使用了一个单独的分号来表示一条空语句。

注意,在for循环、while循环或if语句的右边园括号的分号很不起眼,这很可能造成 一些致命的bug,而这些bug很难定位到。例如下面的代码的执行结果很可能就是作者不想要的效果:

复制代码 代码如下:


             if((a==0)||(b==0)); //这一行代码什么也没做....
             o = null; //这一行代码总会执行

如果有特殊目的使用空语句,最好在代码中添加注释,这样能更清楚的说明这条空语句是有用的

复制代码 代码如下:


    for (i = 0; i < a.length; a[i++] = 0) /*empty*/;

3.声明语句

var和function都是声明语句,它们声明或定义变量或函数。这些语句定义标识符(变量名和函数名)并给其赋值,这些标识符可以在程序任意地方使用。声明语句本身什么也不做,但它有一个重要意义:通过创建变量和函数,可以更好的组织代码的语义。

接下几节将讲述var语句和function语句,但并不包含变量和函数的全部内容。

i.var

var语句用来声明一个或者多个变量,它的语法如下:

var name_1[ = value_1][, ..., name_n[ = value_n]]

关键字var之后跟随的是要声明的变量列表,列表中的每一个变量都可以带有初始化表达式,可用于指定它的初始值。例如:

复制代码 代码如下:


            var i; //一个简单的变量
            var j = 0; //一个带有初始值的变量
            var p, q; //两个变量
            var greet = "hello" + name; //更复杂的初始化表达式
            var x = 2.34,y = Math.cos(0.75),r, theta; //很多变量
            var x = 2,y = x * x; //第二个变量使用了第一个变量
            var x = 2,
                f = function(x) {return x * x}, //每个变量都独占一行
                y = f(x)

如果var语句出现在函数体内,那么定义的是一个局部变量,其作用域就是这个函数。如果在顶层代码中使用var语句,那么它声明的是全局变量,在整个javascript中,都是可见的。在第三章10节提到:全局变量是全局对象的属性,然后和其它全局对象属性不同的是,var声明的变量是无法通过delete删除的。

如果var语句中的变量没有指定初始化表达式,那么这个变量的值初始为undefined。所以,在声明语句之前的变量值就是undefined。

需要注意的是,var语句同样可以作为for循环或者for/in循环的组成部分。(在循环之前声明的变量声明一样,这里声明变量也会"提前"),例如:

复制代码 代码如下:


            for (var i = 0; i < 10; i++) console.log(i);
            for (var i = 0, j = 10; i < 10; i++, j--) console.log(i * j);
            for (var i in o)console.log(i);

注意,多次声明同一变量是无所谓的。

ii.function

关键字function用来声明函数的,我们已经学过函数表达式(4.3).函数定义可以写成语句的形式。例如:下面示例代码中的两种定义写法:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgffjf.html