函数的基本知识

1.函数介绍

1. JS函数的概念 函数就是把特定功能的代码抽取出来,使之成为程序中的一个独立实体。

2. 函数的作用 正如函数的概念, 我们可以根据需要, 将特定的功能用函数来包裹(封装)

3. 使用函数的好处

1, 函数可以在同一个程序或其他程序中多次重复使用(通过函数名调用)

2, 使程序变得更简短而清晰 , 提高可读性

3, 有利于程序维护

5.函数不调用自己不执行

6.调用函数的时候千万不要忘记加小括号

2.函数分类

函数的分类

函数可以分为: 系统函数 内置函数 和 自定义函数

系统函数,内置函数:

是官方提供好的函数,可以直接使用 如: alert(), isNaN(), console.log() ,document.write(), Boolean(), Math.pow()等

alert(): 它的中文意思是“提醒”。它是JavaScript或VBscript脚本语言中窗口window对象的一个常用方法;其主要用法就是在你自己定义了一定的函数以后,通过执行相应的操作,所弹出对话框的语言。并且alert对话框通常用于一些对用户的提示信息。常见的为alert函数。

isNaN(): 通过Number方法把参数转换成数字类型,若转换成功,则返回false,反之返回true,注意它只是判断参数是否能转成数字,不能用来判断是否严格等于NaN。

console.log(): 类似于alert啊,不过不会打断操作。主要是方便调式javascript用的。你可以看到你在页面中输出的内容,不过需要浏览器支持控制台输出。在浏览器界面使用快捷键 F12 就能打开控制台,这个F12 最确切的叫法是开发人员工具。其中,Console 即控制台。点击右键的 Clear console 菜单 或者 输入 clear() /console.clear()然后按回车即可清空控制台内容。

document.write():打开一个新文档,即打开一个流,并擦除当前文档的内容

alert() 提示框

parseInt() 取整,转至十进制

parseFloat()

toString()

aconfirm('确定要删除吗?')

arguments

1 .位数组

  1. 用于接受动态的参数
  2. 只能在函数内部使用
  3. 可以通过下标取值
  4. 它有length属性 (length他有多少参数)
var num = confirm('你确定要删除吗')
console.log(num);

isNaN:如果是数值,就是false,不是数值。true。

3.函数的参数

  1. 函数的书写语法
function 函数名称 (行参1,行参2,...){
  //逻辑代码
  return
}
//2.使用函数
//函数名称(10,20)//10和20是实参
function num(a,b){
  var red = a+b
  return red
}
var red2 = num(100,100)
console.log(red2);


console.log(num(40,500));
console.log(num(50,30));

  1. 函数的定义和调用

自定义函数:

是用户自己定义的函数, 用户可以根据实际需求, 对特定的功能使用函数来封装

注意:1.函数名后括号()中的参数数量不定,也可以没有;(根据功能需要)

2.return关键字的作用是将某个值返回,如果没有返回值则默认返回undefined(未赋值

函数中的arguments数组:

js中函数不介意传递进来多少个参数,也不在乎传进来的参数是什么类型,在调用函数时未必一定要传递指定数量的参数。原来是ECMAScipt中的参数在内部是用一个组(argumebts)来表示。函数接收到的始终是个数组,而不关心数组中包含哪些参数(如果有参数的话)。

arguments可以判断参数的个数,arguments是个数组

我们可以使用arguments.length来获取参数的个数

可以使用arguments[i] 的方式来访问数组中的第i个参数(i为自己给定的整数下标)

作用域: 就是起作用的范围。或者说有效范围; 这里涉及到另外两个概念

什么叫做作用域链?
"过程",当函数内部访问一个变量的时候,就先在函数内部查找

如果函数内部没有,就向外部函数查找,外部也没有,就向window上查找

这个查找的过程叫做作用域链

作用域及作用域链

作用域概述

一个变量的作用范围称为作用域,作用域主要分为全局作用域(全局可以),局部作用域(局部可用)

在全局中不能访问局部作用域变量,但是局部可以访问全局

1.全局作用域

2.局部作用域

3.let const 块级作用域

4,eval函数作用域

局部变量: 定义在函数内部的变量,这个变量只能在函数内部使用,即作用域范围只是函数内部,另外,形参也是局部变量.

全局变量: 全局变量就是定义在函数外部的变量,这个变量在任何函数中都有效,即作用域范围是当前文件的任何地方.

当全局变量与局部变量同名同时存在时 ,局部变量优先

注意: 在定义变量时, 如果不写关键字var也是合法的, 且是全局变量, 但是这样写不安全,容易在其他地方被更改, 所以我们在函数中写变量要加上var

4.函数的嵌套

1.函数的嵌套:函数内部可以再包含其他函数;

2.函数之间允许相互调用,也允许外调用,但是不可以调用同级的嵌套函数

5.DOM的简单操作

1, 获取元素节点对象: document.getElementById(‘id’);

2, 获取输入框的内容: value属性

3, 点击事件: onclick

事件驱动:

因为函数不会主动执行, 只有当调用的时候才会执行函数中的代码, 在前面的dom操作示例中,我们点击了按钮才触发函数调用

所有的函数,没有调用不会执行,那么在我们浏览器中函数调用的源头在何处,就是事件, 只有使用事件去驱动, 函数才被调用; 如: onclick: 点击事件

递归调用: 函数可以自己调用自己,必须要有结束条件,称为函数的递归调用;

重要性: 递归的分量,递归属于函数中比较难理解的知识,在应用开发中,虽然使用不是很频繁,但是很体现你的功底,而且,从事IT行业开发,最好要会递归,如果说现在可以不要求灵活运用的话,以后到公司中一定要会,如果面试中有人问你递归,说明,他对你要求挺高

递归调用的方式:

1. 首先去找临界值,即无需计算,获得的值(一般是返回该值)。

2. 找这一次和上一次的关系(一般从后往前找)

<script>
  function fn (n){
    if(n==1){
      return 1;
    }
    return n + fn(n-1);
  }
console.log(fn(5));
</script>

3.递归常见使用场景

1)循环能做的,递归都能实现(不考虑性能)

2)对象or数组的深拷贝

3)磁盘上文件的遍历

4)管理系统的左侧动态菜单

4. 假设当前函数已经可以使用,调用自身计算上一次的运行结果,再写出这次的运行结果。看上去还是很迷茫, 我们来举个例子:

案例

兔子繁殖问题,设有一只新生兔子,从第四个月开始他们每个月, 月初都生一只兔子, 新生的兔子从第四个月月初开始又每个月生一只兔子按此规律,并假定兔子没有死亡, n(n<=20)个月月末共有多少只兔子?

函数的概念

函数相当于一个代码空间 他里面可以存储一些代码片段,一般我们会将一些代码抽取放入到函数内,这样的操作就是封装。核心就是利用函数来减少余代码的出现,形成对应的复用

函数的定义

function关键词来定义

定义的方式有三种

匿名函数(没有名字的函数 无法复用的)

自执行函数 自己执行 准备工作的执行(框架的封装)

(function(){
  console.log("你好")
})()

具名函数

function 函数名 (形参){
  函数体
}
函数名()调用
//调用 函数名()
        saHello()
        //结合匿名函数来声名具名函数
        var sayHi =function(){
            console.log("你好");
        }
        sayHi()

函数的执行过程

  1. 预编译过程
  2. var关键修饰的变量会预编译
  3. function也会发生预编译

执行过程

函数声明会发生预编译 调用的时候会发生什么操作

  1. 他会去寻找对应的堆空间的函数引用
  2. 然后

函数的参数

没有实际的参数叫做形参 用于定义

有实际值的参数叫实参 用于传递

注意事项

js允许少传参 必须这个没有被使用

arguments的属性及方法

length属性 用于获取对应的传入参数个数

callee方法 指向当前的函数

argumens访问对应的参数使用下标访问

下标从0开始 到 arguments.length-1结束

0表示是第一个=参数 那么5表示第六个参数x表示x+个参数

省略对应的新参 直接传入实参 在函数中使用arguments来接收的对应的实参

举例

传入不定的参数 计算他们之间的和

function sum(){
  var rersult = 0
  for(var i =0;i<arguments.length;i++){
    result+=arguments[i]
  }
  return result
}
console.log(sum(1,2,3,4,5,6))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值