函數,小練習,遞歸,初始作用域

函數
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);
作用域初探
  • 作用域定義:變量(變量作用域又稱上下文)和函數生效(能被訪問)的區域
  • 全局、局部變量
  • 作用域的訪問順序
//兩個獨立的房間不能被互相訪問

//外面的函數不能訪問裏面的,裏面的函數能訪問外面的

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