JavaScript第四天
while和do while
var i = 1;
do{
console.log(i);
i++;
}while(i <= 100)
do就是做,while就是当。
do{
①语句
}while(②条件表达式)
//程序一开始就会执行一次①,然后验证②是否为真,如果是真,继续执行①……这是一个后置验证语句。怎么着都会执行一次:
for语句是主力语句,也就是说,for做不到的,do……while也同样做不到。do……while能做到的,for也一定能做到。
do……while语句中没有循环变量,适合没有循环变量的情况。经常地,它是个死循环。
while语句是一个前置验证语句,其余和do while一样一样的。
while(false){
console.log("哈哈");
}
不输出。因为while是先验证的表达式,然后执行里面的语句。
同样的,while不好用,因为没有循环变量,所以也是经常做死循环!
随机数
Math.random();//默认可以生成一个0~1之间的随机数,不包括0和1
随机数公式
如果想要在[a,b]区间取随机数,能取到a,也能取到b
parseInt(Math.random()*(b - a + 1)) + a;
函数初步
函数的定义和调用
function 函数名(){
}
函数如果不调用,那么里面的语句就一辈子不会执行,不调用就等于白写。
函数的意义1:在出现大量程序相同的时候,可以封装为一个function,这样只用调用一次,就能执行很多语句。
函数的参数
例如
//函数的定义与调用
function leijia(a,b)//参数可以有无数个,用逗号隔开。
{
if (a>b)
{
var t;
t = a;
a = b;
b = t;
}
for (var sum = 0;a<=b;a++)
{
sum += a;
}
console.log(sum);
}
var diyi = parseInt(prompt());
var dier = parseInt(prompt());
leijia(diyi,dier);
罗列在function小括号中的参数,叫做形式参数;调用时传递的数值,叫做实际参数。
函数的意义:我们在调用一个函数的时候,不用关心函数内部的实现细节,甚至这个函数是你上网抄的,可以运用。所以这个东西,给我们团队开发带来了好处。
函数的返回值
定义函数的时候,参数是什么类型的没写,不需要指定类型,也就是说调用的时候,传进去什么什么类型,就是a、b什么类型,我们还可以发现,定义的时候和调用的时候参数个数可以不一样多,不报错。
例如
function shuchu(a,b)
{
console.log(a+b);
}
shuchu(10,5);//这个时候会输出15
shuchu(10,5,3,5,7)//这个时候照常输出15
函数可以通过参数来接收东西,更可以通过return的语句来返回值,“吐出”东西。
function sum(a,b){
return a + b; //现在这个函数的返回值就是a+b的和
}
console.log(sum(3,8)); //sum没有输出功能,就要用console.log输出
//sum(3,8)实际上就成为了一个表达式,需要计算
//计算后就是11,console.log(11);
函数只能有唯一的return,有if语句除外,程序遇见了return,将立即返回结果,返回调用它的地方,而不执行函数内的剩余的语句。
函数有一个return的值,那么现在这个函数,实际上就是一个表达式,换句话说这个函数就是一个值。所以这个函数,可以当做其他函数的参数。
例如
function sum(a,b)
{
return a + b;
}
sum(3,sum(8,7));//结果就是18,程序从最内层做到最外层
递归就是函数自己调用自己本身
函数表达式
定义函数除了使用function之外,还有一种方法,就是函数表达式。就是函数没有名字,称为“匿名函数”,为了今后能够调用它,我们把这个匿名函数,直接赋值给一个变量。
例如
var a = function(a,b)
{
return a+b;
}
console.log(sum(1,4));//输出5
但是要注意,如果把一个函数赋值给了一个变量就不能再起函数名了,起了也无法调用
也就是说,函数的定义有两种方法
var a = function (b)
{
}
function a (b)
{
}
//但是这两种方法不能一起书写
函数声明的提升(预解析)
//先调用
fun();
//然后定义
function fun(){
alert("我是函数,我执行了!");
}
//这个时候是可以运行的,alert也可以运行
S在执行前,会有一个预解析的过程,把所有的函数声明,都提升到了最最开头,然后再执行第一行语句。
所以,function定义在哪里,都不重要,程序总能找到这个函数。
函数会被提升但是函数表达式不会被提升
console.log(fun());
fun = function()
{
alert("测试");
}
这样是不会输出的
又给我们提了个醒,没有极特殊的理由,都要使用function haha(){} 来定义函数,而不要使用var haha= function(){}
函数优先:如果函数名和变量名发生冲突,系统会默认把名字给函数
函数是一个引用类型
基础类型:number、string、boolean、undefined、null
引用类型:object、function、array、RegExp、Math、Date
函数也是一种类型。这个类型就叫做function,是引用类型的一种。
基本类型保存值,引用类型保存地址
我们现在变量a = 6 ; 那么这个a变量里面存储的是6这个数值;
而a = function(){} 那么这个a标签里面存储的是function的内存地址。
//定义了一个变量a,引用了一个funciton
//这个a变量存储的是这个匿名函数的内存地址
var a = function(){
alert("我是一个函数,我执行了");
}
//就是把匿名函数的地址也给了b
var b = a;
//给b添加一个属性, 以后讲对象的时候,我们再看
b.haha = 1;
//输出a的haha属性,你会发现a也有这个属性了:
console.log(a.haha);
//b的haha属性和a的同步更改的,因为都是指向的同一个对象
b.haha++;
b.haha++;
b.haha++;
console.log(a.haha);

浙公网安备 33010602011771号