首页 > 其他分享 >function函数

function函数

时间:2022-11-11 14:14:12浏览次数:47  
标签:function return 函数 let console log

function函数

初识函数,通俗来讲函数是封装重复执行的代码块,函数的使用分为两个步骤,声明函数和调用函数(缺一不可)

声明函数:function函数名(){函数体,代码块}:注意点,声明函数的关键字一定要是小写,函数一般是为了实现某个功能,所以我们常用动词来命名函数

调用函数:函数名()

    // 声明函数
    function ins() {
      document.write('hello,function')
    }
    // 调用函数,如果之声明不调用的话,函数是永远不会执行
    ins()

 

函数封装

函数的封装是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口,函数的作用,就是封装一段可执行代码,和一个或者多个功能

  // 需求封装两个数的和,但是需要让用户输入
  function f(a,b) {
    let a = +prompt('请输入第一个数字')
    let b = +prompt('请输入第二个数字')
    let c = 0
    c = a + b
    document.write(c)
  }
  f(1,2)

函数参数

函数的参数:在声明函数的时候,可以在函数名称后边的小括号中添加一些参数,这些参数被称为形参(形式上的参数)

在调用函数时,同样也需要传递对应的参数,这些参数被称为实参

形参:函数定义时设置接收(调用)传入的实际参数值,类似于一个变量。补充说明,形式上的参数,函数定义的时候,接收传递的参数,当前并不知道是什么

实参:函数调用时传入小括号的真实数据。补充说明,实际上的参数,函数调用的时候,传递给形参的参数,实参时传递给形参的

多次使用函数调用的时候,每一个实际的参数互不干扰

函数的默认参数

如果用户不输入实参,两个形参时undefined,形参进行运算的结果时NaN

有实参就接收实参,没有实参选用默认参数。默认值就是(形参 = 0)

    function f1(a,b) {
        console.log(a,b)
        let c = 0
        for (let i = a; i <=b; i++) {
            // document.write(a)
            // c = a + b
            // a += b
            c = c + i  //这里有一个注意点,我们是需要a到b的累加和,a加b是实参a+b   而不是里边i循环的累加和
        }
        document.write(c)
    }
    f1(1,100)
    // 默认参数
    function f(a = 0,b = 0) {  //给一个默认参数
        let he = 0
        for (let i = a; i < b; i++) {
            he += i
            // he = a + b  //这里把循环去掉是a = undefined b = undefined 相加为NaN
        }
        document.write(he)
    }
    f()
    f(1,5)

函数的数组操作

函数封装数组操作,也可以添加一个默认数组的参数 (形参=[])

   // let arr = [1,3,5,7,9,5,8,10]
    function f(arr = []) {
        console.log(arr) //这里的arr就是整个数组
        let he = 0
        for (let i = 0; i < arr.length; i++) {
            he += arr[i]
        }
        document.write(he)
    }
    f([1,3,5,7,9,5,8,10])
    f() //如果不传入数组参数,是没有arr.length的是会报错的,所以我们要给一个默认的空数组

实参时可以选择变量的

    function name(a,b) {
        // console.log(name)
        let c = 0
        for (let i = a; i <= b; i++) {
            c += i
        }
        document.write(c)
    }
    let e = +prompt('请输入开始的数')
    let d = +prompt('请输入结束的数')
    name(e,d)

形参和实参不匹配

形参和实参相等的情况下他们是会正常显示的

实参大于形参的情况下正常显示,但是多余的实参不会被显示出来,显示的顺序是从前往后

实参小于形参的情况下不正常显示,多余的形参参数是undefined

return返回值(重点)

函数的返回值return,执行完函数体以后把结果交给return,return会把结果返回给我们

return会终止函数,并且只返回它后边的数值,我们调用的是需要把整个函数调用都写出来log(函数名(实参1,实参2,。。。))

    function name() {
        return 'hello,function'  //函数运行到这里就停止了,把后边的结果返回给name()
    }
    document.write(name()) //把return后边的东西,返回到name()中,但是需要打印才出来
    let res = name()
    name()
    document.write(res)
    function name1(a,b) {
        return a + b //return后边的返回值返回给函数调用者
    }
    name1(1,3)
    document.write(name1(1,3))

return返回的的是函数的结果,直接调用,调用的是整个函数体,注意区别

函数细节

函数的名称相同的时候,下边的函数会覆盖掉上边的函数

    function f() {
        document.write(1)
    }
    function f() {
        document.write(2)
    }
    f()  //2 下边的覆盖上边的了
    //return
    function f1() {
        return 66
        alert('你好呀')  //return下边的代码是不会执行的
    }
    let res = f1 ()
    console.log(res)

return的时候,return下边的代码是不会执行的

当你return多个返回值的时候,之后返回最后一个

    //return下边的代码永远不会执行
    //return多个
    function f2(a,b) {
        // return a + b,a - b
        // 如果想返回多个就使用数组
        return [a + b,a - b]
    }
    let se = f2(1,2) //这里返回值是-1
    // return后边只能返回一个值,如果你硬要写多个,只会返回最后一个

当没有return或者return为空的时候,是没有返回值的,虽然有函数体,但是没有返回值,打印调用者就是undefined

    function f3() {
        return
    }
    console.log(f3()) //返回数值是undefined
    function f4(a = 0,b = 0) {
         a + b
    }
    f4(1,2)
    console.log(f4(1,2))  //3

匿名函数

函数可以分为具有名称的命名函数,和没有名称的匿名函数

匿名函数:没有名字的函数,无法直接使用

    // 函数表达式
    let fun = function() {
        // console.log('函数表达式')
        return `函数表达式`
    }
    // fun()
    document.write(fun())  //不加括号反馈的是整个函数体
    // 调用一定写在函数表达式下边
    // 箭头函数
    let fun1 = () => {
        return `函数表达式`
    }
    document.write(fun1())

立即执行函数

立即执行函数两种写法

(function(){ })()或者(function(){ } ())

多个立即执行函数写在一起的时候需要使用 隔开不然会报错

立即执行函数使用场景,多个函数避免命名冲突的时候使用

  (function () {
    console.log(`999`)
  })();
  (function () {
    let name = `10`
  })();
  (function (){
    console.log(`888`)
  }())

作用域

什么是作用域,作用域就是代码或者变量的作用范围

全局作用域:从script开始到script结束,在它里边的叫全局作用域,全局声明的变量全局都可以使用

局部作用域:函数内部有效,叫局部作用域(函数作用域)

块级作用域:只要有花括号就有块级作用域

变量的特殊情况

在函数内部不声明,直接赋值,强烈不推荐

形参可以看作函数的局部变量

重点知识点,作用域链:内部函数访问变量,先在自身作用域中找声明,如果没有就往外层开始找,一直找到全局,如果有就会采取就近原则

全局变量和局部变量:

全局变量是浏览器关闭以后才结束的,局部变量是每次调用的时候创建的,调用结束以后删除

短路运算(逻辑中断)

注意点:0,null,NaN,``, undefined,false,这些都是为假,其余为真

逻辑与&& 短路 找假碰到假就会短路

只要碰到假就会短路,并且返回为假的值,只要短路,就不会继续执行后边的代码

逻辑或| | 短路 找真碰到真就会短路

只要碰到真就会短路,并且返回为真的值,只要短路,就不会继续执行后边的代码

    console.log(2 && 1) //1
    console.log(0 && 1)  //0
    console.log('' && 1)  //''
    console.log(null && 1)  //null
    console.log( 3 || 5)  //3
    console.log( 0 || '') //''
    console.log(3 - `3` || 4) //4

转换为布尔值

    console.log(Boolean(`123`)) //true
    console.log(Boolean(`0`)) //true
    console.log(Boolean(`true`)) //true
    console.log(Boolean(`false`)) //true
    console.log(Boolean(``)) //false
    console.log(Boolean(null)) //false
    console.log(Boolean(undefined)) //false
    console.log(Boolean(NaN)) //false
    console.log(Boolean(0)) //false
    console.log(`pink`) //pink

 

标签:function,return,函数,let,console,log
From: https://www.cnblogs.com/hgng/p/16880297.html

相关文章

  • 2022.11.11 函数式接口
    5.函数式接口5.1概述只有一个抽象方法的接口我们称之为函数接口。JDK的函数式接口都加上了@FunctionalInterface(与重写方法的注解作用类似,校验作用)注解进行标识。......
  • 【Java】guava(六)函数式编程与惰性求值
    举个例子,比如我们的web服务器应用,我们可能会写一个类似拦截器一样的模块来提前把一些公共参数抽取出来,比如像token,userid,ip地址等等这样的信息,放入一个类似ThreadLocal的对......
  • 聚合函数
    1. 聚合函数的介绍聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(groupby)来使用,用于统计和计算分组数据。常用的聚合函数:count(col):表示求指......
  • 1:Unit test and main function-Java API 实战
    目录​​1.抛出企业问题,脱离main测试,模块化编程​​​​2.Junit单元测试的含义和用途​​​​3.怎么获取各种Jar包?MavenRepository获取各类各个版本的jar,这就是仓库。......
  • 构造函数
    构造函数构造函数在创建实例后,是无法在进行添加属性的,所以每个构造函数都有一个prototype属性,这个属性指定一个原型对象,这个原型对象上的所有属性和方法都可以被构造函数......
  • 关于时间的函数以及用法
    获取当天日期fromdatetimeimportdatetoday=date.today()print(today)#2022-11-10输出当天日期<class'datetime.date'>print("当前年:",today.year)prin......
  • 文件操作--seek函数
    """测试目标1.r+w+a+区别2.文件指针对数据读取的影响"""#r+:r没有该文件则报错;文件指针在开头,所以能读取出来数据#f=open('test1.txt','r+')#f=o......
  • 拓端tecdat|excel代写构建柯布-道格拉斯Cobb-Douglas生产函数的可视化
    我使用excel来构建Cobb-Douglas生产函数的可视化。生产函数将任何给定公司的输出表示为两个输入(人工和资本)和参数(α和β)的函数。当α和β之和等于1时,可以证明它们分别代表......
  • 【单片机/嵌入式】复位中断服务函数与main函数
    一、复位中断服务函数调用main函数在GD32F450ZGT6的启动文件startuup_gd32f450_470.s中可以发现,复位中断服务函数调用了main函数。【疑问】为什么复位中断服务程序里面直......
  • 通过调用函数判断一个数是否为质数
    /*//1.书写判断某个数是否为质数的方法,将这个方法封装在一个函数里    functionodd(a){      count=0      for(vari=1;i<......