函数的基本了解

209 阅读5分钟

1.函数的使用

function 函数名(){
    函数体
}
//函数调用,执行函数,函数必须调用,不然不执行
函数名();
函数命名规范:字母,数字,下划线,$,不能以数字开头,小驼峰命名法,第二个单词首字母大写,例如:getName;

2.函数的作用

函数是执行特定任务的代码块,优点是可以让代码复用,提高实际开发的效率

3.函数传参

function 函数名(形参1,形参2....){
    函数体
}
函数名(实参1,实参2....)

函数括号里面的叫做形参,和变量作用差不多,也是存储数据的,而调用时小括号里面的叫做实参,实参调用时,相当于给变量赋值(形参与形参,实参与实参中间用','号分隔;

传参的作用

函数如果不传参就相当于说是固定了,不论你调用多少次都仅仅是哪个方法,连数值都不变,我们多次调用它,就没有意义,而添加了实参,可以很大程度上提高我们函数的灵活性,就是说函数就像是个计算公式,我们只需要将数值放上去,它会给出我们想要的结果

形参与实参的数目尽量要一致

如果调用时实参大于形参,例如:

function getSum(a,b) {
      document.write(a+b+'<br>');
    }
    getSum(11,22,33);
    //输出的结果会是33

它只会按形参的数目来从左往右的截取

如果形参大于实参:

function getSum(a,b) {
      document.write(a+b+'<br>');
    }
    getSum(11);
    //输出的结果会是NaN
    //因为你实参数目少的话,会自动给你补一个undefined来传递给形参,undefined与任何数相加结果都为NaN

所以,你如果真不想实参数目等于形参数目,你可以让实参多于形参☺☺ 你也可以给函数一个默认值,让程序更严谨

function getSum(a = 0,b = 0){
      document.write(a+b+'<br>');
    }
    getSum(11);//这样的话得到的值是11

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

函数的返回值

前面说了函数是执行特定任务的代码块,所以它在执行后需要将结果返回给我们,我们才可以很好的进行下一步的操作 返回值不是必须的,我们要根据具体的需求来判断一个函数需不需要返回值

返回值书写:return 值; 注意:

return 后面代码不会再被执行,会立即结束当前函数,所以 return 后面的数据不要换行写

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

作用域

通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

作用域分为全局作用域和局部作用域(函数作用域)

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

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

同样的,因为作用域的不同,变量也分为了全局变量和局部变量

全局变量:全局变量在任何区域都可以访问和修改

局部变量:局部变量只能在当前函数内部访问和修改

局部变量如果未声明直接使用,相当于window.变量,整个页面当做了一个对象

// let num = 10;
    // function fn() {
    //   let num = 20;
    //   console.log(num);
    // }
    // fn();
    /* function fn2() {
      let count = 20;
    }
    console.log(count); */

    // let num2 = 30
    // function fn3() {
    //   num2 = 20;//相当于全局变量windows.num2;
    //   console.log(num2);
    // }
    // fn3();
    // console.log(num2);

    /* function fn4(x,y) {//形参相当于局部变量
      console.log(x,y);
    }
    console.log(x);//x会当成一个未定义的变量 */

    var num4 = 10;
    function fn4() {
      var num4 = 20;
      console.log(num4);//20
    }
    console.log(num4);//10
    fn4();
    //访问原则,在能够访问到的情况下找局部,如果局部没有,一直往上寻找,直到找到为止

匿名函数

函数可以分为匿名函数和具名函数,在之前我们写的函数都是具名函数,是有函数名的,匿名函数没有函数名,无法直接使用

函数表达式

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

let fun = function(){
//函数体
}
//调用
fn();

//其中函数的形参和实参使用跟具名函数一致。

立即执行函数 (函数)()或(函数())

(
      function () {
        console.log(1111);
      }
    )();
    (function (x,y) {
        console.log(x+y);
      }
    )(1,5);
    //注意: 多个立即执行函数要用 ; 隔开,要不然会报错

立即执行函数可以防止变量的污染

拓展:上面说的函数都只是普通函数,构造函数和普通函数的区别就是调用方式的不同 普通函数是直接调用,而构造函数需要使用new关键字来调用,构造函数命名一般是单词首字母大写例如:Person