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);
posted @ 2019-12-03 15:21  张贺zhanghe  阅读(53)  评论(0)    收藏  举报