猪窝

2007-12-09

循环与函数-JavaScript学习笔记

Filed under: JavaScript — admin @ 12:35 am

条件语句

if (condition) {

    statements;

}

条件必须放在if后面的圆括号中。条件的求值结果永远是一个布尔值,花括号中的语句,不管有多少条,只有在给定条件的求值结果是true的情况下才会得到执行。

if (1>2) {

alert(”The world has gone mad!”);

}else {

alert(”All is well with the world”);

}

2.6.1 比较操作符

几乎只能用在条件语句中的操作符

>, <, >=, <=, ==, !=, 比较符

2.6.2 逻辑操作符

JS允许我们把条件语句里的操作组合在一起。

比较操作叫做逻辑操作数,下面是把这两个逻辑操作数组合在一起的具体做法:

if (num>=5 && num<=10) {

alert(”The number is in the right range.”);

}

&&”逻辑与”,是一个逻辑操作符。

逻辑操作符的对象是布尔值,每个逻辑操作数返回一个布尔值true或false。

“逻辑与”操作只有在两个操作数都是true时才会是true。

“逻辑或”操作符由两个垂直线字符构成(||)。只要它的操作数中有一个是true,”逻辑或”操作就将是true。如果它的两个操作数都是true,”逻辑或”操作也将是true。只有两个都是false时,”逻辑或”操作才会是false。

if (num>10 || num<5 ){

alert (”The number is not in the right range.”);

}

JS还提供一个”逻辑非”操作符,它由一个感叹号(!)单独构成。”逻辑非”操作符只能作用于单个逻辑操作数,其结果是把那个逻辑操作数所返回的布尔值取反。

我们可以用”逻辑非”操作符把整个条件语句的结果颠倒过来。

if ( !(num >10 || num <5)){

alert (”The number IS in the right range.”);

}

2.7 循环语句

if语句的唯一不足是它无法用来完成重复性的操作。如果需要反复多次执行同一个代码块,就必须使用循环语句。

循环语句可以反复多次执行同一段代码,分为几种不同的类型,但它们的工作原理几乎一样:只要给定条件仍得到满足,代码就重复执行下去;一旦条件求值不再是true,循环就到此为止。

2.7.1 while

while (condition) {

statements;

}

while循环与if的唯一区别是:只要给定的求值结果是true,包含在花括号里的代码就将反复的执行下去。

var count = 1;

while (count < 11) {

alert (count);

count++;

}

代码分析: 首先,创建变量count并赋值1;

以count<11为条件(只要小于11,就重复执行这个循环),创建一个while循环;

在while内部,用”++”操作符对变量count的值执行加1操作;

而这一操作将重复10次;

当循环完成后,变量count的值是11

注意:这里的关键是在while循环的内部必须发生一些会影响循环控制条件的事情。

2.7.2 do…while

类似与if语句的情况,while循环的花括号部分所包含的语句有可能不被执行:因为对循环控制条件的求值发生在每次循环开始前,所以如果条件首次求值结果是false,则代码不会被执行。

在某些场合,我们需要那些被包含在循环语句内部的代码至少执行一次。这时,do循环将是我们最佳选择

do {

statements;

} while (condition);

这与刚才介绍的while循环非常相似,但是有个很大的区别: 对循环控制条件的求值发生在每次循环结束之后。因此,即使循环控制条件的首次求值是false,包含在花括号里的语句也至少会被执行一次。

我们可以把前一小节里的while循环改写为如下所示的do…while循环:

var count = 1;

do {

alert (count);

count++;

} while (count < 11);

这段代码的执行结果与上面的结果完全一样。循环10次,最终count的值是11.

再看看下面这个变体:

var count = 1;

do {

alert (count);

count++;

} while(count < 1);

这个do循环里,控制条件的求值永远不为true,可是因为do循环的循环条件出现在花括号部分之后,所以这个do里的语句还是执行了一次。

注意细节:这些语句执行完毕后,count的值将是2不是1。

2.7.3 for

用for循环来重复执行一些代码也是很方便。从循环执行一些代码的意义上讲,它类似于while循环;从另一方面讲,for循环只是刚才介绍的do循环的一种变体。 如果仔细观察do循环的例子,就会发现它们可以被改写:

initialize;

while(condition) {

statements;

increment;

}

而for循环不过是把如上所示的循环结构改写紧凑:

for (initial condition; test condition; alter condition) {

statement;

}

用for循环来重复执行一些代码的好处是循环控制结构更加清晰。与循环有关的内容都包含在圆括号内,上个例子可以改写成

for (var count = 1; count < 11; count ++) {

alert (count);

}

现在,当我们把一些代码放在花括号中间,我们清楚的知道代码将执行10次。

for循环最常见的用途之一是对某个数组里的全体元素进行遍历处理。这往往需要用到数组的array.length属性。这个属性告诉我们数组里的个数

var beatles = Array(”John”, “Paul”, “George”, “Ringo”);

for (var count = 0; count<beatles.length; count++) {

alert(beatles[count]);

}

我们将看到4条alert,分别对应4个队员。

2.8 函数

如果需要多次使用同一组语句,还可以把它们打包成函数。所谓函数就是一组允许人们在代码里随时调用的语句。从效果上来看,每个函数都相当于一个短小的脚本。

作为一个良好的习惯,我们应该先对函数定义再调用它们。

function shout() {

var beatles = Array(”John”, “Paul”, “George”, “Ringo”)

for (var count = 0; count < beatles.length; count ++){

alert(beatles[count]);

}

}

这个函数里的循环语句将依次弹出几个alert对话框来显示beatles乐队成员的名字,可以随时使用以下所示记号来调用这个函数:

shout();

每当需要重复执行时,我们可以利用函数来避免大量输入相同内容。不过函数真正的优势是我们可以把不同的数据传递给他们,而它们将使用实际传递给他们的数据来完成预定的操作。把数据传递给函数时,称为参数

函数的定义:

function name(arguments) {

statements;

}

JS提供了许多可以拿来就用的函数,例如alert。

在定义函数时,可以声明任意多个参数,需要用逗号隔开。函数内部,可以像使用普通变量那样使用任何一个参数。下面是一个函数的例子: 将两个数值相乘处理

function multiply(num1, num2){

    var total = num1 * num2;

alert(total);

}

在定义了这个函数以后,我们可以在任意位置调用:

multiply(10, 2);

如果这个函数能把乘法结果返回给调用这个函数的语句,往往更有用。我们可以创建一个函数,让他返回一个值,包括数值,字符串,数组,布尔值

function multiply(num1, num2){

    var total = num1 * num2;

    return total;

}

下面这个函数只有一个参数(一个华氏温度值),将返回一个值(同温度的摄氏温度值)

function convertToCelsius(temp) {

var result = temp – 32;

result = result / 1.8;

return result;

}

函数真正的价值体现在: 我们可以把他们当作一种数据类型来使用,意味着我们可以把一个函数的调用结果赋值给一个变量

var temp_fahrenheit = 95;

var temp_celsius = convertToCelsuis(temp_fahrenheit);

alert (temp_celsius);

把华氏温度值95转换为摄氏温度值。

参考: 命名变量时,我用下划线来分隔各个单词;命名函数时,我从第二个单词开始把每个单词的第一个字母大写。

变量的作用域

作为一种良好的习惯,我们第一次对某个变量进行赋值时应该用var对其做出声明。变量可以是全局的,也可以是局部的,在谈论全局变量和局部变量的区别时,我们其实是在讨论变量的作用域(scope)。

全局变量: 可以在脚本中任何位置被引用,包括函数的内部,全局变量的作用域是整个脚本。

局部变量:只存在于它做出声明的函数内部,函数外部无法引用,作用域仅限于特定的函数。

如果一个函数的内部不小心使用了某个全局变量,即使本意是想使用一个局部变量,JS也会认为是在引用那个全局变量。用var可以明确为变量设定一个作用域。

如果在某个函数中使用了var,那个变量就被视为一个局部变量,只存在于这个函数上下文中;反之,如果没有使用var,那个变量就被视为一个全局变量,如果脚本中已经存在一个同名的变量,这个函数将覆盖那个现有的变量的值。

例子:

function square(num) {

    total = num * num;

    return total;

}

var total = 50;

var number = square(20);

alert (total);

这段代码中,total的值从50到20被覆盖。输出结果是400。

因为未在这个函数里用var关键字把内部的total变量明确的声明为局部变量,这个函数就把全局变量的值也改变了。

正确的写法是 var total = num * num;

现在total安全了,再调用square()也不会影响到他。

请记住: 函数在行为方面应该像一个自我包容的脚本,这意味着在定义一个函数时,我们必须把它内部的变量全都明确的声明为局部变量。

不争,元气不伤;不畏,慧灼闪光。

不怒,百神和畅;不忧,心地清凉。

不求,不卑不亢;不执,可圆可方;

不贪,便是富贵;不苟,何惧君王!

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress