深挖javascript函数祖坟之声明函数,匿名函数,函数表达式,函数构造器,函数提升,自调用函数,函数参数

函数声明

function myFunction(a, b) {
     return a * b;
}

函数表达式、匿名函数

JavaScript 函数也可以使用表达式来定义。

var x = function (a, b) {return a * b};
var z = x(4, 3);

上面的函数实际上是一个匿名函数(没有名称的函数)。存放在变量中的函数不需要函数名。他们总是使用变量名调用。

Function() 构造器

var myFunction = new Function("a", "b", "return a * b");

var x = myFunction(4, 3);

实际开发中尽量避免使用 new 关键字。其实跟表达式一一样的。

函数提升

Hoisting 是 JavaScript 将声明移动到当前作用域顶端的默认行为。

Hoisting 应用于变量声明和函数声明。

正因如此,JavaScript 函数能够在声明之前被调用:

myFunction(5);

 function myFunction(y) {
     return y * y;
}

使用表达式定义的函数不会被提升。

自调用函数

函数表达式可以作为“自调用”。

自调用表达式是自动被调用(开始)的,在不进行调用的情况下。

函数表达式会自动执行,假如表达式后面跟着 ()。

您无法对函数声明进行自调用。

您需要在函数周围添加括号,以指示它是一个函数表达式:

实例1

(function () {
    var x = "Hello!!";      //我会调用我自己
})();

 

函数可用作值

JavaScript 函数可被用作值:

function myFunction(a, b) {
    return a * b;
}

var x = myFunction(4, 3) * 2;

函数是对象

JavaScript 中的 typeof 运算符会为函数返回 "function"。

但是最好是把 JavaScript 函数描述为对象。

JavaScript 函数都有属性方法

arguments.length 会返回函数被调用时收到的参数数目:

实例

function myFunction(a, b) {
    return arguments.length;
}

箭头函数

箭头函数允许使用简短的语法来编写函数表达式。

您不需要 function 关键字、return 关键字和花括号。

// ES5
var x = function(x, y) {
  return x * y;
}

// ES6
const x = (x, y) => x * y;

箭头函数没有自己的 this。它们不适合定义对象方法。

箭头函数未被提升。它们必须在使用前进行定义。

使用 const 比使用 var 更安全,因为函数表达式始终是常量值。

如果函数是单个语句,则只能省略 return 关键字和大括号。因此,保留它们可能是一个好习惯:

实例

const x = (x, y) => { return x * y };

JavaScript 函数参数

JavaScript 函数不会对参数值进行任何检查。

参数规则

JavaScript 函数定义不会为参数(parameter)规定数据类型。

JavaScript 函数不会对所传递的参数(argument)实行类型检查。

JavaScript 函数不会检查所接收参数(argument)的数量。

参数默认

如果调用参数时省略了参数(少于被声明的数量),则丢失的值被设置为:undefined

有时这是可以接受的,但是有时最好给参数指定默认值:

实例

function myFunction(x, y) {
    if (y === undefined) {
          y = 0;
    } 
}

 

如果函数调用的参数太多(超过声明),则可以使用 arguments 对象来达到这些参数。

arguments 对象

JavaScript 函数有一个名为 arguments 对象的内置对象。

arguments 对象包含函数调用时使用的参数数组。

这样,您就可以简单地使用函数来查找(例如)数字列表中的最高值:

x = findMax(1, 123, 500, 115, 44, 88);

function findMax() {
    var i;
    var max = -Infinity;
    for (i = 0; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
}

或创建一个函数来总和所有输入值:

实例

x = sumAll(1, 123, 500, 115, 44, 88);

function sumAll() {
    var i, sum = 0;
    for (i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值