JavaScript-函数

发布于:2023-01-05 ⋅ 阅读:(315) ⋅ 点赞:(0)

JavaScript函数:
        1.函数声明:
                函数的名称
                函数参数列表,包围在括号中并由逗号分隔
                定义函数的JavaScript语句,用大括号{ }括起来


        2.函数表达式:
              函数也可以由函数表达式创建,这样的函数可以是匿名的。
                例如:
                 const square = function(number) { return number * number; };
              函数表达式也可以提供函数名,并且可以用在函数内部指代其本身,或者在调试器堆栈跟踪中识别该函数。
                例如:
                 const factorial = function fac(n) {return n<2 ? 1 : n*fac(n-1)};

        3.调用函数
        定义一个函数并不会自动的执行它。定义了函数仅仅是赋予函数以名称并明确函数被调用时该做什么。调用函数才会以给定的参数真正的执行这些动作。
        函数一定要处于调用他们的域中,但是函数的声明可以被提升(出现在调用语句之后)。函数域是指函数声明时的所在的地方,或者函数在顶层被声明时指整个程序;备注: 只有使用如上的语法形式(即 function funcName(){})才可以。

        4.函数作用域

        在函数内定义的变量不能在函数之外的任何地方访问,因为变量仅仅在该函数的域的内部有定义,一个函数可以访问定义在其范围内的任何变量和函数。换言之,定义在全局域中的函数可以访问所有定义在全局域中的变量。在另一个函数中定义的函数也可以访问在其父函数中定义的所有变量和父函数有权访问的任何其他变量。

        5.作用域和函数堆栈

        一个函数可以指向并调用自身有三种方法:

                ①函数名

                ②arguments.callee

                ③作用域下的一个指向该函数的变量名

       调用自身的函数我们称之为递归函数。在某种意义上说,递归近似于循环,两者都重复执行相同的代码,并且两者都需要一个终止条件(避免无限循环或者无限递归)。

        6.嵌套函数和闭包

        可以在一个函数里嵌套另一个函数。嵌套(内部)函数对其容器(外部)函数是私有的。它自身也形成了一个闭包。一个闭包是一个可以自己拥有独立的环境与变量的表达式(通常是函数)

        既然嵌套函数是一个闭包,就意味着一个嵌套函数可以继承容器函数的参数和变量。换句话说,内部函数包含外部函数的作用域。

        总结:

        ·内部函数只可以在外部函数中访问

        ·内部函数形成了一个闭包:它可以访问外部函数的参数和变量,但是外部函数却不能使用它的参数和变量。

        7.保存变量

        一个闭包必须保存它可见作用域中所有参数和变量。因为每一次调用传入的参数都可能不同,每一次对外部函数的调用实际上重新创建了一遍这个闭包。只有当返回的值没有再被引用时,内存才会被释放。

        这与其他对象存储引用没有什么区别,但是通常不太明显,因为并不能直接设置引用,也不能检查他们。

        

        8.多层嵌套函数

        很熟可以被多层嵌套。

        9.命名冲突

        当同一个闭包作用域下两个参数或者变量同名时,就会产生命名冲突。更近的作用域有更高的优先权,所以最近的优先级最高,最远的优先级最低,这就是作用域链。链的第一个元素就是最里面的作用域,最后一个元素便是最外层的作用域。

        10.闭包

        闭包是JavaScript中最强大的特性之一。JavaScript允许嵌套函数,并且内部函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。

        但是,外部函数却不能够访问定义在内部函数中的变量和函数,这给内部函数的变量提供了一定的安全性。

        此外,由于内部函数可以访问外部函数的作用域,因此当内部函数生存周期大于外部函数时,外部函数中定义的变量和函数的生存周期将比内部函数执行时间长。当内部函数以某一种方式被任何一个外部函数作用域访问时,一个闭包就产生了。

        11.函数参数

        在JavaScript中函数参数默认是undefined。然而,在某些情况下设置不同的默认值是有用的。

例如

function multiply(a, b) {
  b = (typeof b !== 'undefined') ?  b : 1;

  return a*b;
}

multiply(5); // 5

        在过去,用于设定默认参数的一般策略是在函数的主题中测试参数值是否为undefined,如果是则赋予这个参数一个默认值。

例如:

function multiply(a, b = 1) {
  return a*b;
}

multiply(5); // 5

        剩余参数语法允许将不确定数量的参数表示为数组。例如

function multiply(multiplier, ...theArgs) {
  return theArgs.map(x => multiplier * x);
}

        

        12.箭头函数

        箭头函数表达式(也称胖箭头函数)相比函数表达式具有较短的语法并以词法的方式绑定this。箭头函数总是匿名的。

        有两个因素会影响引入箭头函数:更简洁的函数和this。

        this的词法:在箭头函数出现之前,每一个新函数都重新定义了自己的this值(在构造函数中是一个新的对象;在严格模式下是未定义的;在作为”对象方法“调用的函数中指向这个对象;等等)。

     

  借鉴于:

表达式与运算符 - JavaScript | MDN (mozilla.org)

本文含有隐藏内容,请 开通VIP 后查看