JS要点整理-5

76 阅读3分钟

函数

函数就是一个内部封装了部分代码的盒子,可以在多个位置被调用

函数的使用

函数的定义(创建)

声明式定义

function 函数名(参数:非必传) { 函数被调用的时候需要执行的某一段代码 }

        function sum() {
            for(var i = 1; i <= 10; i++){
                if (i % 2 === 0) {
                    console.log(i);
                }
            }
        }

赋值式定义

var 函数名 = function (参数: 非必传) {}

   var num = function () {
            console.log(1);
        }

函数的调用

调用的时候 不管如何定义, 都是使用 函数名()

如果一个函数只定义, 而不调用, 那么永远不会执行

函数的参数

为了 让函数的功能 更加灵活, 不会导致函数的功能太过于死板

一个函数可以接收多个形参与实参, 多个形参与实参使用、间隔,不能多到影响阅读

形参和实参的数量可以不一致 (非常不推荐)

函数中 参数可以具有默认值 (ES6 的新写法):如果一个 函数的参数给了 默认值, 那么这个参数永远不会是 undefined

形参

函数定义时小括号中书写的内容, 相当于在函数中 创建了一个变量

具体的值 有实参提供, 如果 实参没有传递对应的内容, 那么值为 undefined

实参

函数调用时小括号中书写的内容, 这里书写的内容, 会传递给 对应的 形参

num()
        //函数定义的小括号里为形参
        function num(a,b){
            console.log(a, b);
        }
        //函数调用的小括号里为实参
        num(1,2)
        //实参给的多了忽略多出内容
        // 第一个实参会按照顺序给第一个形参, 并以此类推
        //多写的实参, 没有对应的形参接收, 那么在函数中暂时无法使用
        num(1,2,3)
        //实参给的少了,多写的形参没有对应的实参传递具体的值,相当于 变量定义了但没有赋值,输出undefined
        num(1) 
        //解决上述问题方法函数中 参数可以具有默认值
        //es5        
        function num2(a, b) {
            if (b === undefined) {
                b = '未给出b的值'
            }
            console.log(a,b);
        }
        num2(1)
        //es6   只有实参给的少了才将赋值号右侧的值赋给形参 
        function num3(a, b = '未给出b的值') {
            console.log(a,b);
        }
        num3(1)
        num3(1, 2)

函数的返回值

每一个函数调用完毕后 都会有一个结果(值), 默认为 undefined

关键字 return:后边可以跟 任何的数据, 包括表达式 函数中 return 只会生效一个, 因为 return 具有中断函数的能力, 所以一般 return 会写在函数的末尾,如果想要写在函数的 开头, 必须结合 分支语句

// function fn () {}
        // // 将 fn 函数的 执行/调用 结果, 存到一个变量 res 中
        // var res = fn()
        // console.log(res)    // undefined
        // console.log(fn())   // undefined
        
  // function fn () {
        //     return '书写你要返回的内容'
        //     return 1 + 1         // 函数中 return 只会生效一个
        // }
        // // 将 fn 函数的 执行/调用 结果, 存到一个变量 res 中
        // var res = fn()
        // console.log(res)    
        // console.log(fn())        
 
 // return 具有中断函数的能力   return 不具备 打印的功能, 如果你想看在控制台看到数据, 请书写 console

       function fn(x, y) {
            var min = x > y ? y : x
            // 拿到 1~较小值 之间的所有数字
            for (var i = min; i >= 1; i--) {
                // 寻找 x 和 y 的公约数
                if (x % i === 0 && y % i === 0) {
                    // console.log(i)
                    /**
                     *  当前 分支语句执行的时候, 代表找到了 公约数
                     *  顺序中 第一个就是最大公约数, 所以当前分支第一次执行完毕后, 就等于找到了最大公约数
                     *
                     *  然后直接 return i    将最大公约数返回给外部, 并且函数到此结束, 后续不在运行
                    */
                    return i
                }
            }
        }

对象

属于 引用数据类型,存储基本数据类型的集合

对象的花括号中书写的不是代码, 而是键值对格式的数据

键值对 --- key/value --- 属性名:属性值

冒号左边的统称为: 键/key/属性名

右边统称为: 值/value/属性值

创建对象

  • 字面量方式创建对象
    • 语法:var obj = {} var obj1 = {键值对, 键值对}
  • 内置构造函数创建
    • 语法:var obj = new Object()
  • 对象内对于 键(key) 的要求
    • 推荐使用符合变量命名规则和规范的名字
    • 可以使用纯数字当作 键名
      • 这种情况下该属性会排列在最前面
    • 可以使用任何特殊符号
      • 使用特殊符号的时候,在书写时需要被引号包裹

对象数据类型的操作(增删改查)两种语法

 //点语法
        var obj = {
            name : '张三',
            id : 119,
        }
        console.log(obj);
        // 2.1 增       对象名.新的属性名 = 对应的属性值
        obj.sex = '男'
        console.log(obj);
        // 2.2 删    delete 对象名.要删除的属性名
        delete obj.name
        console.log(obj);
        // 2.3 改   对象名.要修改属性值的属性名 = 新的属性值
        obj.id = 120
        console.log(obj);
        // 2.4 查   对象名.要查询的属性名       会得到对应的属性值
        console.log(obj.sex);

        //中括号语法
        var ob = {
            tel:119,
            email:223,
            name:'班晨然'
        }
        console.log(ob);
        // 增   对象名['要新增的属性名'] = 对应的属性值
        ob['sex'] = '男'
        console.log(ob);
        // 删   delete 对象名['要删除的属性名']
        delete ob['email']
        console.log(ob);
        // 改   对象名['要修改的属性名'] = 新的属性值
        ob['tel'] = 110
        console.log(ob);
        // 查   对象名['要查询的属性名']
        console.log(ob['name']);

对象点语法和中括号语法的区别

  1. 只要正常情况, 对象的属性名符合变量的命名规则与规范的情况下, 使用点语法或者中括号语法 没有任何区别
  2. 是在遇到一些特殊的属性名的时候 就要更换了, 比如 说属性名为数字
  3. 还有一种情况, 属性名想要使用变量的时候, 也需要使用中括号语法
//二者区别
        var obe = {
            0: '这是零',
            1: '这是一'
        }
        console.log(obe);
        //console.log(obe.0);      //错误
        console.log(obe['0']);     //可以
        
        var obw = {
            name : 'yao'
        }
        var myName = 'name'
        console.log(obw.myName);   //.对象的点语法, 会将 . 后边的 这个单词/属性 视为一个普通字符串,而不会当成一个变量,所以现在相当于 去 对象 obj 中 查找一个 属性名为 myName 的键值对,但是对象中并没有, 所以得到了一个 undefined
        console.log(obw[myName]);  //加引号同上,不加是变量名,所以可以查到
        //通常用点语法,键为数字或者要写变量名用中括号语法