函数
2022/8/15 6:22:46
本文主要是介绍函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
函数
概述
函数就是多行代码的抽取(多行代码会构成特定的功能)也叫方法;
优点:
减少冗余代码(重复代码放在函数里面,需要时调用)
函数封装(特定的一些代码使用函数包起来)
提高代码的可维护性及阅读性
函数分类
-
系统函数 window里所有的函数都属于系统函数(alert()prompt() console.log())
-
内置函数 所有的内置对象里面的函数(Math.pow())
-
自定义函数 自己定义的函数
自定义函数的定义以及调用
1.使用function关键词定义匿名函数 (一般不传参)
function (形参 可省略){ 函数体(代码) } //直接调用(自动调用) 函数调用需要加上() 没有复用价值 (function (){ console.log() })()
2.使用function关键词定义具名函数
!!当定义了两个形参,但只写了一个实参时,不会报错,没有传进实参的形参会生成undefined
function 函数名 (形参,形参,...){ 函数体(代码) } function say(){ console.log("hello") } //声明 say() //调用 //变种声明 var sayhi = function(){ console.log("hi") } sayhi() //两种声明 调用速度 第一种更快 //function 和 var 在预编译阶段就会声明 所以可以在声明之前调用 //var 关键词修饰的变量在预编译是不会赋值的 所以在声明之前调用会输出undefined
3.使用new Function方式 (new 后面的内容首字母大写)
var 函数名 = new Function("形参1,形参2","函数体")//string类型 var sayBye = new Function('console.log("bye")') sayBye() //传参 var sayBye = new Function('username','console.log("bye bye!!"+username)') //调用 sayBye('李四')
在程序执行之前有个预编译过程
预编译
1.会声明对应的function和 var关键词修饰的变量(开辟内存的操作)
2.对应的function的内存空间开辟以后会将对应的代码块放到其中等待调用
3.var关键词只会开辟一个空间 并不会进行赋值 (默认给一个undefined的值)
return关键词
return返回对应的数据 是在函数内容进行数据返回的 调用return后 后面的内容不会再执行
function sum(a,b){ return a+b console.log("不会执行此代码") }console.log(sum(1,2))//返回的对应的1+2的值
如果没有return关键词 返回的是undefined的值
function say(){ console.log("hi")//hi } console.log(say())//undefined
函数标准定义
function 函数名(形参1,形参2,...){ 代码块; return } 函数名 ()
函数执行过程
1.对应的开辟的function内存里面的代码块丢给方法栈去执行
2.执行栈就会自动执行对应的代码块,执行完返回对应的结果
3.当前结果返回完毕以后,对应的执行栈里面的结果的内存空间就会回收,将这个内存空间销毁
function sum(a){ console.log(a) return a } sum() sum() //两个sum执行完输出的结果都是10,但是所占内存地址不一样
函数作用域
function a (n){ var number = 1 return number } console.log(number) //会显示number is not defined //因为作用域的原因,这里是一个局部变量
作用域
当前一个变量的作用范围 分为局部作用域(函数作用域)和全局作用域(在对应的全局变量)
局部作用域(在一个函数内声明的 或者是在一段代码块内声明的 他的作用范围就是当 前的代码块) if代码块里面没有局部作用域
全局作用域(在对应的全局声明 作用范围是全局的)
作用域链
当前作用域内没有找到对应的变量就会向上去找(不会向同级找),这种构成结构称为作用域链
当有var时打印内容写在赋值的上面,则会输出defined,而不会向上寻找,这是因为由于存在预编译,此时变量已经被定义,只是没有赋值,因此能找到这个定义了的变量,所以不会向上寻找
var a = 20 function fn(){ console.log(a);//undefined 没有var关键词就输出20 var a= 10 if(10>9){ console.log(a;)//undefined 没有var关键词就输出10 var a =30 if(5>4){ console.log(a);//undefined 没有var关键词就输出30 var a = 40 if(a>10){ console.log(a);//40 } } } }
函数的arguments(参数数组 参数的集合)
arguments是一个伪数组 (有部分的数组特性)
所有的函数都具备arguments(对象)
1.可以通过length属性得到对应的长度
2.[ ]下标(从0开始)来访问里面的元素
function sum(){//不清楚参数个数(无参) //获取里面传递的所有的参数arguments length var result = 0 //遍历对应的arguments里面的所有的参数 for(var i= 0;i<arguments.length;i++){ result +=arguments[i]//取出里面的参数进行求和 } return result }console.log(sum())
函数的嵌套
函数的嵌套: 函数内部可以再包含其他函数;
函数之间允许相互调用,也允许向外调用, 但是不可以调用同级函数的嵌套函数;
function fn1(){ console.log('函数1'); function fn2(){ console.log('函数2'); // fn1() 没有结束就是死循环 } function fn3(){ console.log('函数3'); //调用函数2 fn2() } fn2() fn3() } fn1() //函数1 函数2 函数3 函数2
DOM的简单操作
1.获取对应的标签(通过id获取)
document.getElementById("id的属性值")
2.input框的值获取value属性
document.getElementById("input框的id").value ---//得到的是string类型 //得到input框的值
3.点击事件onclick
element.onclick = function(){ //相关操作 }
事件驱动!!! //通过输入框输入数值判断对应的奇偶并打印 <input id="number" type="text"> <button id="btn">判断奇偶</button> <script> function handlerClick(){ //拿到input框里面的内容 获取到input框 var inputValue = document.getElementById('number').value//得string类型 // console.log(typeof inputValue); 如果是+法操作必须要先转为number类型 //判断奇偶的操作 if(inputValue%2==0){ //取余操作会自动转换成string类型 console.log('当前为偶数'); }else{ console.log('当前为奇数'); } } //首先需要点击按钮 获取按键 加点击事件 //事件触发 自动调用对应的函数 (事件驱动) document.getElementById('btn').onclick = handlerClick //调用函数不用再加括号 </script>
所有的函数,没有调用不会执行,那么在我们浏览器中函数调用的源头在何处,就是事件, 只有使用事件去驱动, 函数才被调用; 如: onclick: 点击事件
递归
递归三要素
-
找规律
-
找临界值(没有规律的值)return
-
自己调用自己(在函数内部调用自己的函数)
递归效率极低 (一般不使用 用作文件的遍历 菜单遍历)
2.4.6.8....第两百位 function fn(n){ //参数 n 表示位数 if(n==1){ //没规律的 return 2 //返回具体的值 }else { //有规律的 返回对应的规律公式 return fn(n-1)+2 //fn(n-1)当做值来看 } }console.log(fn(200))
bfs 广度优先搜索
dfs 深度优先搜索
这篇关于函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门
- 2024-12-27JWT单点登录原理学习入门