知识总结 JavaScript【函数】

函数

概念

函数即封装了一段可重复性使用的代码块,实现代码复用。


使用

声明函数

function 函数名(){
        函数体
}

调用函数

函数名();

注意:

  1. 声明函数的关键字全部小写
  2. 声明函数最好用动词
  3. 函数不调用自己不执行
  4. 调用函数要加小括号
  5. 最好使用驼峰命名法

封装函数

把多个函数封装,对外只提供一个接口(相当于快递打包)。


参数

语法如下:

function 函数名(参数列表){
        函数体
}

形参

声明函数时写在函数名右边小括号里的叫形参(形式上的参数)。

实参

调用函数时写在函数名右边小括号里的叫实参(实际上的参数)。

注意:
实参多于形参,正常调用,多的剔除。
形参少于实参,没有值的形参是 undefined ,结果为 NaN


返回值

Q:为什么函数需要返回值?
A:函数处理结果写死,无法灵活变通,为了能够让我们自主决定如何处理结果,因此让函数返回最终结果即可。

语法如下:

function 函数名(){
        return 需要返回的结果;
}
函数名();

在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用。

注意事项

  • return 语句后面的代码不会被执行,并且 return 后面代码不会再被执行,所以 return 后面的数据不要换行写

            // 封装一个计算两个数字的和和差的函数
            function getAdd(a, b) {
                return a + b
                return a - b
            }
            document.write(getAdd(3, 2))  // 5
    

    返回了第一个 return 的结果,后面不会被返回。

  • return 只能返回一个值(返回的结果是最后一个值)

            // 封装一个计算两个数字的和和差的函数
            function getAdd(a, b) {
                return a + b, a - b
            }
            document.write(getAdd(3, 2))  // 1
    

    返回了最后的结果。

  • 如果想返回多个值可选择数组的方式

            // 封装一个计算两个数字的和和差的函数
            function getAdd(a, b) {
                return [a + b, a - b]
            }
            document.write(getAdd(3, 2))  // 5,1
    

    返回两个结果,以数组的形式。

  • 函数可以没有 return ,这种情况函数默认返回值为 undefined

            function getAdd(a, b) {
                a + b,
            }
            document.write(getAdd(3, 2))  // undefined
    

arguments

存储了传递的所有实参,展示形式是一个伪数组。

特性:

  1. 具有 length 属性
  2. 按照索引的方式进行存储
  3. 没有真正数组的一些方法。如 pop()push()
            function getSum() {
                console.log(arguments);  // Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
                arguments.push(4)
            }
            getSum(1, 2, 3)
    
    在这里插入图片描述

作用域

作用域定义

就是代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性,且减少命名冲突。

作用域分类

作用域分类特点
全局作用域整个 script 标签,或者是一个单独的 js 文件
局部作用域在函数内部的作用域,这个代码的名字只能在函数内部起效果或作用(又被称为函数作用域)
块级作用域块作用域由 {} 包括, if 语句和 for 语句里面等

变量作用域

  1. 全局变量:全局作用域下的变量,全局都可使用(如果局部变量没有声明直接赋值,即没定义 let ,也会被看作全局变量)。
  2. 局部变量:函数内部的作用域,只能在函数内部使用(函数的形参也可以看作是局部变量)。
  3. 块级变量:只能在块作用域内访问,不能跨块访问。

注意:
若函数作用域内部或块级作用域内部没声明变量,直接赋值,则看成全局作用域,不建议这么做。


匿名函数

将匿名函数赋值给一个变量,并通过该变量名称进行调用,我们称这个为匿名表达式。

let fn = function(){

}

总结

总结


今日错题

  1. num 最后的结果。

            function test(num) {
                num = 100
                num++
            }
            let num = 10
            test(num)
            console.log(num);
    

    A.10

    B.11

    C.100

    D.101

    我的答案:D;正确答案:A

    自我解析:最后要求在控制台打印的变量 num 是全局变量,而函数 test() 里的 num 为局部变量,且没 return 返回出来,因此结果为10。

  2. 下图运行结果为

            function getSum(x = 0, y = 0) {
                x + y
            }
            let res = getSum()
            console.log(res);
    

    A.0

    B.NaN

    C.undefined

    D.报错

    我的答案:A;正确答案:C

    自我解析:函数 getSum 没有return 返回结果。

  3. 代码运行结果为

            function fn(x, y) {
                document.write(x + y)
            }
            fn(1, 2)
            console.log(x, y);
    

    A.undefined

    B.NaN

    C.1,2

    D.报错

    我的答案:A;正确答案:D

    自我解析:变量 xy 在函数内声明的,函数变量,全局作用域下没有这两个变量,因此报错。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值