JavaScript学习笔记5

一、函数function

function 随便起个名(){}
例:
在这里插入图片描述
在这里插入图片描述
以上情况就是耦合,耦合程度非常高,耦合代码就是低效代码

编程讲究高内聚,弱耦合

第二个就是简便写法:可以用test调用执行,写几个test就调用执行几次

例:
在这里插入图片描述
答案:357
写了一个test();就执行了一遍函数语句,如果不写test();就相当于有一个框来存东西,但是不执行

例:

        function test() {
            document.write('hello world');
        }

函数function可以先定义功能,之后再去用

二、函数定义

1.函数声明

定义一个函数可以先写一个function,函数就是另一个类型的变量

我声明一个函数test,test是函数名。
写成下面

function test(){
	函数体
}

函数名起名:开发规范要求,函数名和变量名如果由多个单词拼接,必须符号小驼峰原则(第一个单词首字母小写,后面的首字母大写)

function theFirstName() {
            document.write(theFirstName);
        }

答案:function theFirstName(){}。打印出来的是函数体


这与c语言和c++不同,他们打印指针,会输出指针的地址,而js这种弱数据语言(解释性语言)永远不输出地址,输出地址指向房间

2.函数表达式

var test = fuction test (){
document.write(‘a’);
}
test();

答案 a。这种方式像定义一个变量


上面这种方式,可以演变成第三种,匿名表达式【不写 test 这种函数名】

var demo = fuction (){
document.write(‘a’);
}

(1)命名函数表达式

在这里插入图片描述
在这里插入图片描述

上面这个函数的函数名name是abc

在控制台 console 直接输出 test 就会出现函数

在控制台 console 直接输出 abc 会报错,表达式就会忽略他的名字 abc。

在上面例子中,fuction abc(){document.write(‘a’);}这一部分叫表达式,是会忽略abc 这个地方的名字,会变成匿名函数表达式,不如直接写成匿名函数

(2)匿名函数表达式(常用,一般说的函数表达式就是匿名函数表达式

在这里插入图片描述

在这里插入图片描述

三、组成形式

1. 函数名称

function test(){}其中 function 是函数关键字,test 是函数名,必须有(){},参数可有可没有,参数是写在()括号里面的。

如果写成 function test(a,b){},相当于隐式的在函数里面 var a,var b 申明了两个变量,()括号里面不能直接写 var

function test(a, b){
 document.write(a + b)
}
test(1, 2)

答案 3。上面这个例子,1 就会到 a 里面去,2 就会到 b 里面去,这是传参的形式

2. 参数(可有可没有,但是高级编程必有)

(1)形参(形式参数):指的是 function sum(a,b){}括号里面的 a 和 b

(2)实参(实际参数):指的是 sum(1,2);里面的 1,2

js天生不定参,形参可以比实参多,实参也可以比形参多

在这里插入图片描述
答案 37,参数把函数抽象了,可以组成很多形式

例 如果第一个实参的数大于 10,就减第二个数的运算结果;如果第一个实参的数小于 10,就加第二个数的运算结果

在这里插入图片描述
答案 3
上面改成 sum(11,2) //答案 9


function sum(a,b){
 document.write(a);
}
sum(11, 2, 3)
//答案 11 function test(a, b, c,d) {
 document.write(a);
document.write(d);
}
sum(11, 2, 3)
//答案 11,undefined,上面这道题是形参多,实参少

js 参数不限制位置,天生不定参数
在每一个函数里面都有一个隐式的东西 arguments 这个是实参列表


function test(a) {
 console.log(arguments);
 console.log(arguments.length);
}
sum(11, 2, 3)

在这里插入图片描述

function test(a) {
 for(var i = 0; i < argument.length; i++){
 console.log(arguments[i]);
 } }
sum(11, 2, 3)

在这里插入图片描述

形参长度求法
function sum(a, b, c, d) {
 console.log(sum.length);
 }
sum(11, 2, 3)
//答案 4

任意个数求和(不定参才能求出来)

在这里插入图片描述
形参永远有尽头,要实现任意的数求和,无法定义形参。


在这里插入图片描述
答案是 2。a 变,arguments 跟着变。有一个映射关系。


在这里插入图片描述

答案 3。arguments 里面一个变,一个跟着变,但是[1,2]是两个人,相当于映射关系


当形参两个,实参一个

function sum(a, b){
//arguments[1]没值
 b = 2;
 console.log(arguments[1]);
}
sum(1);

//答案 undefined,实参列表出生时有几个,就有几个,
//再写 b=2,也不加在 arguments[1]里面了,此处的 b 就当变量用,他和实参不映射。

形参实参完全对应上才映射
function sum(a, b){
 //arguments[1]没值
 a = 2;
 console.log(arguments[0]);
}
sum(1);

//答案 2

3. 返回值 return

结束条件和返回值 return,return 有终止函数的功能

function sum(a, b){
 console.log(‘a’);
 console.log(‘b’);
 return;
}
//答案 a,b
function sum(a, b){
 console.log(‘a’);
return;
 console.log(‘b’);
}
//答案 a
//没写 return,实际上是加上了一个隐式的 return

return 最常用的是返回值。本意是把一个值返回到函数以外

自己定义的函数也能返回,return 空格 123

<script>
        function sum() {
            console.log(num); //undefined
            return 123;
            console.log('a');
        }
        var num = sum();
        console.log(num); //123
        //闭包
    </script>

答案这里的 num 就是 123,而且 console.log(‘a’);无效,这里的 return 又终止函数,又返回变量

例把 target 转成数字
function myNumber(target){
 return +target; //利用+隐式的转换成了数字类型
}
var num = myNumber(123);
console.log(typeof(num) + “” + num);
//答案 number 123

一般函数处理完一个参数,是为了返回

typeof()也是返回值,也是函数

typeof(123)也可以写成 typeof 123【typeof 空格 123】,只是看起来不方便

四、作业

1.写一个函数,功能是告知你所选定的小动物的叫声。
2.写一个函数,实现加法计数器。
3.定义一组函数,输入数字,逆转并输出汉字形式。
4.写一个函数,实现 n 的阶乘。
5.写一个函数,实现斐波那契数列。

1、此处可用 break,也可以用 return在这里插入图片描述
2、略

3、在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

reverse 是逆转
str.charAt(0)意思是把第 0 位拿出来
for(var i = num.length - 1; i >= 0)这是倒着拿的意思
一个字符串长度是 3,他的第三位字符串是 2
可以把第二个 function 放第一个里面,但是一般单独写,因为transfer 是转换
str += transfer(num[i]);是先执行后面的 transfer(num[i]),再赋值给前面


字符串的底层也是数组,取字符串中的字母也可以str[0]这样取


4、

方法一 function jc(n){
//n 的阶乘
 for(var i = 1; i <= n; i ++){
 num *=i;
} }
方法二 function mul(n){
 if(n == 1 || n == 0){
 return 1;
}
 return n * mul(n - 1);
}

方法二叫递归:
1 找规律,
2 找出口(找停的点)
递归的优点是代码简洁,缺点慢

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、拿递归写斐波那契数列 fb(n)==fb(n - 1) + fb(n - 2);

function fb(n){
if(n == 1 || n== 2){
 return 1;
}
 return fb(n - 1) + fb(n - 2);
}

在这里插入图片描述

递归返回的顺序:先执行的最后被返回,最后执行完(等最底层的一层层返回)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值