ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

函数

2022-08-14 22:04:58  阅读:133  来源: 互联网

标签:function 调用 console 函数 var log


函数

概述

函数就是多行代码的抽取(多行代码会构成特定的功能)也叫方法;

优点:

减少冗余代码(重复代码放在函数里面,需要时调用)

函数封装(特定的一些代码使用函数包起来)

提高代码的可维护性及阅读性

函数分类
  1. 系统函数 window里所有的函数都属于系统函数(alert()prompt() console.log())

  2. 内置函数 所有的内置对象里面的函数(Math.pow())

  3. 自定义函数 自己定义的函数

自定义函数的定义以及调用

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 深度优先搜索

标签:function,调用,console,函数,var,log
来源: https://www.cnblogs.com/sdcffsdc233/p/16586446.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有