函数,小练习,递归,初始作用域

函数
1.定义
  • 函数声明
  • 函数表达式
2.组成形式
  • 函数名称
  • 参数
  1. 形参
  2. 实参
  • 返回值
function test() {
	document.write('a');
	document.write('b');
	document.write('c');
}
if (1 > 0) {
	test();
}
if (2 > 0) {
	test();
}
if (2 > 0) {
	test();
}
//简化代码,把重复用的代码放到一个函数里,用的时候直接调用函数名
function test() {
	var a = 123;
	var b = 234;
	var c = a + b;
	document.write(c);
}
test();
//只有让他执行的时候才会执行,而且可以执行很多次

函数声明

function test() {}
//函数名,theFirstName多个单词小驼峰
函数表达式
1.命名函数表达式
var test =function abc() {
	console.log('a');
}
//test的函数名是abc
2.匿名函数表达式
var demo =function () {
	console.log('b');
}
//忽略函数名,demo的函数名是demo
//简称为函数表达式
函数组成形式
function 函数名(形参) {
函数体

函数名(实参);

function sum(a, b) {
	var c = a + b;
	document.write(c);
}
sum(1, 2);
function sum(a, b) {
	if(a > 10) {
		document.write(a - b);
	}else if(a < 10) {
		document.write(a + b);
	}else{
		document.write(10);
	}
}
sum(11, 2);
function sum(a) {
	//arguments -- [11,2,3] 实参列表
	
	for(var i = 0; i < arguments.length; i++) {
		console.log(arguments[i])//打印实参列表
	}
}
sum(11, 2, 3);
//参数不限制数量,形参比实参多(多出来的形参没有值),实参比形参多(arguments放实参列表)
function sum(a, b, c, d) {
	if(sum.length > arguments.length) {
		console.log('形参多了');
	}else if(sum.length < arguments.length) {
		console.log('实参多了');
	}else{
		console.log('相等');
	}
}
sum(11, 2, "a");
//sum.length形参的长度,arguments.length实参的长度
function sum() {
	//arguments [1,2,3,4,5,6,7]
	var result = 0;
	for(var i = 0; i < arguments.length; i++) {
		result += arguments[i];
	}
	console.log(result);
}
sum(1,2,3,4,5,6,7,8,9);
//不知道参数是多少的情况下,求和
function sum(a, b) {
	//arguments [1,2]
	//var a = 1;
	a = 2;
	arguments[0] = 3;
	console.log(a);
}
sum(1, 2);
//形参变实参列表跟着变,实参列表变,形参也跟着变,映射关系,不是同一个变量
function sum(a, b) {
	//arguments [1]
	b = 2;
	console.log(arguments[1]);//undefined 
}
sum(1);
//实参列表出身的时候有几个就是几个,不会再增加,b跟实参不映射

返回值

function sum(a, b) {
	console.log('a');
	console.log('b');
	return;//终止函数
}
sum(1);
function sum() {
	return 123;//返回值+终止函数
}
var num = sum();
//num就等于123
function myNumber(target) {
	return +target;//返回参数
}
var num = myNumber('123');
console.log(typeof(num) + " " + num);//number 123

练习

1.写一个函数,功能是告知你所选定的小动物的叫声。

function scream(animal) {
	switch(animal) {
		case "dog" :
			document.write('wang!');
			return;
		case "cat" :
			document.write('miao!');
			return;
		case "fish" :
			document.write('o~o~o!');
			return;
	}
}
scream('dog');//wang!

2.写一个函数,实现加法计数器。

3.定义一组函数,输入数字,逆转并输出汉字形式。

function reverse() {
	var num = window.prompt('input');
	var str = "";
	for(var i = num.length - 1; i >= 0; i --) {
		str += transfer(num[i]);
	}
	document.write(str);
}
function transfer(target) {
	switch(target) {
		case "1" :
			return "壹";
		case "2" :
			return "贰";
		case "3" :
			return "叁";
	}
}

4.写一个函数,实现n的阶乘。

//递归,能把代码变得简洁
function mul(n) {
	if (n == 1 || n == 0) {
		return 1;
	}
	return n * mul(n - 1);
}
mul(5);

5.写一个函数,实现斐波那契数列。

function fb(n) {
	if (n == 1 || n == 2) {
		return 1;
	}
	return fb(n - 1) + fb(n - 2); 
}
fb(5);
作用域初探
  • 作用域定义:变量(变量作用域又称上下文)和函数生效(能被访问)的区域
  • 全局、局部变量
  • 作用域的访问顺序
//两个独立的房间不能被互相访问

//外面的函数不能访问里面的,里面的函数能访问外面的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章