JS(函数)

89 阅读6分钟

函数: function执行特定任务的代码块

函数的作用: 可以实现代码复用,提高开发效率

函数的声明语法:

编辑

function  sayHi (){

     document.write('hi~')
}

函数名命名规范:

  • 和变量命名基本一致
  • 尽量小驼峰式命名法
  • 前缀应该为动词
  • 命名建议:常用动词约定

函数的使用:

函数调用:函数名()

注意点:1.声明(定义)的函数必须调用才会真正地被执行,使用()调用函数

2.函数可以多次被调用,每一次函数调用函数体里面的代码会重新执行一次

3.函数 的功能代码都要写在函数体当中

函数的复用代码和循环重复代码区别:

循环代码写完即执行,不能很方便控制执行位置

随时调用,随时执行,可重复调用

函数的传参:

  • 形参:声明函数时写在函数名右边小括号里的叫形参(形式上的参数)
  • 实参: 调用函数时写在函数名右边小括号里的叫实参(实际上的参数)
  • 形参可以理解为是在这个函数内声明的变量(比如 num1 = 10)实参可以理解为是给这个变量赋值
  • 尽量保持形参和实参个数一致
  • 函数参数中间使用逗号隔开

函数传参的好处是:极大的提高了函数的灵活性

  // 参数可以让 函数变得更加灵活
        // 1.形式参数 形参  在定义函数时 函数后面的小括号里面的变量名 变量名前面不要加声明变量的关键字
        //  2..实际参数  实参 在调用函数 在函数名后面的小括号里面的具体的内容
        // 在调用函数时 会将 函数的实际参数 赋值给 形式参数  
        // 形参
        function getSum(num1, num2) {
            console.log(num1 + num2)
        }
        // getSum(实参)
        getSum(10, 50)    // 第一次调用函数将 10赋值给num1 将 20 赋值为num2
        getSum(30, 40)    // 第一次调用函数将 30赋值给num1 将 40 赋值为num2

​编辑

参数默认值:

形参:可以看做变量,但是如果一个变量不给值,默认是undefined

但是如果做用户不输入实参,就出现undefined+undefined=NaN的结果

 // 如果调用函数时,用户没有传递参数,可以使用es6的新语法 给函数的形参赋值为0
        // 这个默认值只会在没有实参的情况下 才会把默认值传给实参
        function getSum(num1 = 0,num2 = 0) {
            document.write(num1 + num2)
        }
        getSum()    //0
        getSum(10,20)   //num1=10  num2=20

这个默认值只会在缺少实参参数传递时 才会被执行,所以有参数会优先执行传递过来的实参, 否则默认为 undefined.

函数的返回值:

当函数需要返回数据出去时,用return关键字

//为什么要返回:因为不同的场景可以使用这个值
return  数据

注意点:

  • 在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用
  • return 后面代码不会再被执行,会立即结束当前函数,所以 return 后面的数据不要换行写
  • return函数可以没有 return,这种情况函数默认返回值为 undefined

函数的覆盖:

  • 两个相同的函数后面的会覆盖前面的函数
  • 在Javascript中 实参的个数和形参的个数可以不一致
  • 如果形参过多 会自动填上undefined (了解即可)
  • 如果实参过多 那么多余的实参会被忽略 (函数内部有一个arguments,里面装着所有的实参)
  • 函数一旦碰到return就不会在往下执行了 函数的结束用return

break结束和return结束的区别:

  • break是跳出整个循环的结束
  • return是跳出当前函数的结束

作用域:

  • 全局作用域:作用于所有代码执行的环 境(整个 script 标签内部)或 者一个独立的 js 文件

  • 局部作用域:作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系, 所以也称为函数作用域。

    let num1 = 20 //全局变量 function getArr() { //局部变量只能在函数内部使用 let a = 1 console.log(a) //在这个里面 访问全局变量 console.log(num1); } getArr() // 想要在 全局作用域的地方 访问 局部变量

变量作用域在js中的特殊情况:

  • 如果函数内部,变量没有声明,直接赋值,也当全局变量看

  • 只有函数内部的形参可以看做是局部变量。

    // 需要在 全局作用域 先声明这个变量 let a function getA(){ // 变量一定要加 声明变量的关键字 在函数内部 如果没有加 声明变量的关键字 这个变量就会被看作 全局变量 // 推荐做法: 在 全局变量作用域 先声明这个变量 在函数里面 相当于 在使用全局变量 给全局赋值 a = 2 } getA() console.log(a)

变量访问原则: 采取就近原则的方式来查找变量最终的值

匿名函数:

匿名的函数使用方式分为两种:1. 函数表达式 2.立即执行函数

  • 函数表达式:将匿名函数赋值给一个变量,并且通过变量名称进行调用

    // 定义函数两种方式 // 1.function 函数名 (){} // 2.函数表达式 把函数当做为变量的值赋值为 一个变量 // const 变量名 =function(){

        // }
      const fn = function (name){
            console.log(name);
        }
         fn('吃西瓜')
    

  • 立即执行函数:不需要调用,直接执行.多个立即执行函数要用 ; 隔开,要不然会报错

    // 立即执行法 // 匿名函数自调用 // 防止变量名冲突 ;( function (){ console.log('西瓜不甜'); }()) ; (function(){ console.log(123); })()

立即执行函数的作用: 防止变量污染

短路运算:

逻辑运算符中的短路运算:

  • 短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行
  • 原因:通过左边能得到整个式子的结果,因此没必要再判断右边
  • 运算结果:无论 && 还是 || ,运算结果都是最后被执行的表达式值,一般用在变量赋值

​编辑

隐式转换(转换成boolean):

  • 有字符串的加法 “ ” + 1 ,结果是 “1”
  • 减法 - (像大多数数学运算一样)只能用于数字,它会使空字符串 "" 转换为 0
  • null 经过数字转换之后会变为 0
  • undefined 经过数字转换之后会变为 NaN