码迷,mamicode.com
首页 > 其他好文 > 详细

ECMAScript6 Function

时间:2015-02-28 14:30:17      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

函数

  函数是编程语言非常重要的一部分,javascript得函数从最初到现在并没有太大得改变。遗留下来的问题和有差别得行为使得程序员很容易犯错,这可能需要程序员通过编写更多的代码来实现普通得功能。

  ECMAScript6的函数有了很大的改进,考虑到了很多编程人员投诉和询问的问题。这样的结果是改进了很多ECMAScript 5 JavaScript函数功能,使得编写javascript程序更少出错,功能更强大。

1、默认参数

  javascript中的函数是特殊的,它允许任意多的参数传递给函数而无视函数定义中声明的参数个数。这样你可以定义一个可以操作不同参数个数的函数,通常是为没有传递的参数给定一个默认值。在ECMAScript 5或者之前的版本中,你可能会通过以下的形式来实现此功能:

function makeRequest(url, timeout, callback) {

    timeout = timeout || 2000;
    callback = callback || function() {};

    // the rest of the function

}

   在这个例子中,timeout和callback都是可选的参数,如果在调用函数中没有传递参数,就使用默认值。逻辑操作OR(||)当第一个操作数是false时就返回第二个参数。因为函数调用的时候没有提供参数,那么就是隐式的将函数参数设置为undefined,逻辑操作OR经常用来为缺失的参数提供默认值。这种方式有一个缺点,timeout有可能在调用的时候传递参数0,但是由于OR操作符中0等同于false,timeout最终的值会被2000所替代。

  另一个方式来定义缺失的参数是通过检查arguments.length来确认传递的参数个数,ranhou再依次检查每个参数的值是否等于undefined。

  ECMAScript 6 为定义默认的参数提供了一种更加方便的方法,例如:

function makeRequest(url, timeout = 2000, callback = function() {}) {

    // the rest of the function

}

   这里,在调用函数的时候只有第一个参数是必须要传递的。另外两个参数有默认值,因为不用再确认参数是否被传递,这样函数体就更加简练。当makeRequest函数调用时,传递了三个参数,那么默认参数就不起任何作用。例如

// uses default timeout and callback
makeRequest("/foo");

// uses default callback
makeRequest("/foo", 500);

// doesn‘t use defaults
makeRequest("/foo", 500, function(body) {
    doSomething(body);
});

   任何有默认值的参数都是可选参数,而没有默认值的参数则是必选参数。

  可以为任意的参数提供默认值,包括在没有默认值的参数之前声明默认参数,例如

function makeRequest(url, timeout = 2000, callback) {

    // the rest of the function

}

   在这个例子中,timeout的默认值只有在没有第二个参数传递或者第二个参数显式的传递为undefined的时候,例如:

/ uses default timeout
makeRequest("/foo", undefined, function(body) {
    doSomething(body);
});

// uses default timeout
makeRequest("/foo");

// doesn‘t use default timeout
makeRequest("/foo", null, function(body) {
    doSomething(body);
});

   在上面例子中,null被认为是传递的确认的值,所以默认参数不会被使用。

  也许默认参数最有意思的地方在于默认值不一定是原始值。例如,你可以执行一个函数来返回默认参数:

function getCallback() {
    return function() {
        // some code
    };
}

function makeRequest(url, timeout = 2000, callback = getCallback()) {

    // the rest of the function

}

   这里,如果最后的参数没有提供,函数getCallback将会被调用来返回正确的默认参数。这可能会给函数带来很多有趣的动态信息的注入。

2、Rest运算符

  因为javascript函数可以传递任意多的参数,不需要明确的定义每一个参数。最开始,javascript利用arguments对象来检查函数的没有明确声明的参数,在大多数情况下,这个方法很好用,但是稍显笨重。例如:

function sum(first) {
    let result = first,
        i = 1,
        len = arguments.length;

    while (i < len) {
        result += arguments[i];
        i++;
    }

    return result;
}

 

未完待续。。

 

ECMAScript6 Function

标签:

原文地址:http://www.cnblogs.com/avivaWang/p/4305226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!