高内聚 低耦合
函数是另一种类型的变量
1 函数基本应用
例子
function test(){
document.write("a");
document.write("b");
document.write("c");
}
test();
test();调用多少就写多少
例子
function test() {
var a = 123;
var b = 234;
var c = a + b;
document.write(c);
}
// 装很多语句,调用了text()才执行
test();
定义函数的两种方法
一 函数声明 例子
function theFirstName() {
}
document.write(theFirstName); // 指代函数体,解释性语言不输出地址,
二 函数表达式
命名函数表达式
例子 函数名test.name="abc"
var test = function abc(){
document.write("a");
}
匿名函数表达式 常用(简化为函数表达式)
例子的函数名demo.name="demo"
var demo = function(){
document.write("b");
}
函数组成形式(函数名称+参数+返回值return)
function test(a,b){
// 相当于声明了两个变量var a和var b, 没有值,可以通过传递参数的形式给变量赋值test()
document.write(a+b);
}
test(1,2);
例一
function sum(a,b) {
var c = a + b;
document.write(c);
}// 形式参数
sum(13,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,5);
形参和实参的个数可以不统一
例子
function sum(a,b,c,d) {
document.write(a);
document.write(d);
}
sum(12,3,5);
例子 arguments -- [11,2,3] 实参列表,无论形参有没有接收完实参,arguments都会把实参当数组存起来
function sum(a,b,c) {
console.log(sum.length);// 形参的长度
console.log(arguments);
console.log(arguments.length);// 实参的长度
// 有数组有长度可以循环圈数
for(var i = 0; i < arguments.length; i++){
console.log(arguments[i]);
// 可以输出每一位
}
}
sum(11,2,3,2,9);
例子
function sum(a,b,c,d,e){
if(sum.length>arguments.length){
console.log("形参多")
}else if(sum.length<arguments.length){
console.log("实参多")
}else{
console.log("相等")
}
}
sum(11,2,3,2);
求和的功能/加法计数器
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,)
// 1
function sum(a,b) {
//arguments [1,2]实参列表
//var a = 1;
a = 2;
console.log(arguments[0]);
// 看实参arguments的第0位和形参是不是一样
}
sum(1,2);
结果:arguments[0]=2
例子
function sum(a,b) {
// 第一种
a = 9
console.log(arguments[0]);//arguments[0]=9
// 第二种
arguments[0] = 77;
console.log(a);//a=77
}
sum(2,5,6)
例子
function sum(a,b) {
b = 2;
console.log(arguments[1]);
// 只有完全相等的时候才会映射,不相等的时候undefined,不对应实参
}
sum(1);
return
一、中止函数
function sum() {
console.log("a");
return;
console.log("b");
}
sum(1,3);
二、值返回到函数外部并且终止函数
function sum(){
// console.log("a");
return 123;
// console.log("a");
}
var num = sum();
//结果num=123
function myNumber(target) {//target把目标转成数字并返回
return +target;//加号隐式调用number
}
var num = myNumber("123");
console.log(typeof(num) + ":" +num);
练习题
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;
}
}
2 写一个函数,实现加法计数器
function sum() {
var result = 0;
for(var i = 0; i<arguments.length; i++){
result += arguments[i];
}
document.write(result);
}
sum();//在里面打需要加的数字
3定义一组函数,输入数字,逆转并输出汉字形式
function reverse(){///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的阶乘 --------- 方法n! = n *(n - 1)!;
function jc(n) {
if(n==1) {
return 1;
}
return n * jc(n-1);
}
var n = parseInt(window.prompt("input"));
可输入的代表一种变量,参数也是一种变量,所以可以转化
// 方法一 累乘
function mul(n) {
// var num = 1;
// for(var i = 1;i <= n; i++);
// num*=i;
// 方法二 递归就是return公式,有递归先写return. (1.找到规律n! = n *(n - 1)! 2.用已知的东西找到出口跳出循环),让代码变得更简洁
if(n == 1 || n == 0) {
return 1;
}
return n * mul(n - 1);
}
mul(5);//控制台打印
5.写一个函数,实现斐波那契数列
规律 fn(n) = fb(n-1) + fb(n - 2);
function fb(n) {
if(n == 1 || n == 2) {
return 1;
}
return fb(n-1) +fb(n-2);
}
fb(3);
运算过程
fb(5) ==> fb(4) +fb(3);
fb(4) ==> fb(3) +fb(2);
fb(3) ==> fb(2) +fb(1) = 1 + 1;
引用值
一 数组 arr[0]代表数组第一位 /以下例子
var arr = [5,2,3,4,5,9,11];
console.log(arr[0]); // 直接打印
arr[0] = 3; // 还可以直接修改
var arr = [1,2,3,4,5,9,11];
for(var i = 0; i < arr.length; i++) {
// console.log(arr[i]);// 把数组的每一位拿出来
// arr[i] += 1; // 每位加1
}
二 对象object
var deng = {
// 属性名:属性值,
lastName: "Deng",
age : 40,
sex : undefined,
wife :"xiaoliu",
father :"daye",
son:"xiaodeng",
handsome:false
}
console.log(deng.father);
deng.father = "daniang";
console.log(deng.father);