JavaScript函数具有默认参数

时间:2014-12-04 15:25:04

标签: javascript function

我目前使用以下函数检查三个参数是否有任何传递,如果没有参数发送,这是设置默认值的最佳方法吗?

function setupSlideshow(t, e, s) {
    e = e || '.slideshow';
    s = s || '> li';
    t = t || 70;
    $timeout(function() {
        $(e).cycle({
            swipe: true,
            slides: s,
            fx: 'scrollHorz',
            pager: '.cycle-pager',
            timeout: 0
        });
    }, t);
}

使用setupSlideshow(70);这会将我的超时时间设置为70 ms,但在设置元素时,使用setupSlideshow('.new-slideshow');并不起作用。

setupSlideshow(70);
setupSlideshow('.new-slideshow');
setupSlideshow('.new-slideshow','.slide');

5 个答案:

答案 0 :(得分:2)

我想你已经忘记了必须按顺序输入参数......这里你的第一个参数是超时的时间(以毫秒为单位),第二个参数是幻灯片元素。如果你省略了你的时间,那么幻灯片元素将是第一个参数,因此被函数视为你的时间。

jQuery用来解决这个问题的一种方法是使用一个option参数。这包括传递要使用的函数的对象,这看起来像:

function setupSlideshow(options) {
    options = options || {};
    e = options.e || '.slideshow';
    s = options.s || '> li';
    t = options.t || 70;
    $timeout(function() {
        $(e).cycle({
            swipe: true,
            slides: s,
            fx: 'scrollHorz',
            pager: '.cycle-pager',
            timeout: 0
        });
    }, t);
}
setupSlideshow({t:70});
setupSlideshow({e:'.new-slideshow'});
setupSlideshow({e:'.new-slideshow',s:'.slide'});

使用这种技术对于这种用法很有用,但如果可能的选项太多且文档记录不充分,也可能成为问题制造者,所以要保持清洁和评论:)

答案 1 :(得分:1)

参数必须按照定义的顺序传递给函数。所以;

setupSlideshow('.new-slideshow');

此处的参数将传递给函数中的t变量。

你想要做的是:

setUpSlideshow(false, '.new-slideshow', '.slide');

这会将false传递给t变量,它会更改为您的默认值。

或者,您可能需要考虑使用'options'/'arguments'对象......:

function setupSlideshow(args) {
    e = e in args ? args.e : '.slideshow';
    s = s in args ? args.s : '> li';
    t = t in args ? args.t : 70;
    ...
}
args = {
    e: '.new-slideshow',
    s: '.slide'
};

setupSlideshow( args );

答案 2 :(得分:0)

就我有限的JS而言,我认为我已经得到了这个。

目前,在您编写e = e || '.slideshow';时,您尝试访问e作为变量,浏览器会将其解释为参数。将其更改为以下内容:

var e = e || '.slideshow', s = s || '> li', t = t || 70;

答案 3 :(得分:0)

请看下面的实现。使用默认参数'features = []',可以在ES6中使代码高度简洁。

ES6:新

function setUserAccess(features = []){
    return features;
};

setUserAccess(); // []

ES5:旧

function setUserAccess(features){
    features = features || [];
    return features;
};

setUserAccess(); // []

答案 4 :(得分:0)

具有以下默认参数的旧功能方式:

function x(param1, param2){
  param1 = param1 || 'param1_default';
  param2 = param2 || 'param2_default';
  console.log(param1, param2);
  //etc
}

这种更好的方式:

使用函数销毁和默认设置

function x({param1='param1_default', param2='param2_default'}={}){
  console.log(param1, param2);
//etc
}

x(); //returns 'param1_default', 'param2_default'
x({}); //returns 'param1_default', 'param2_default'
x({param1:'a'}); //returns 'a', 'param2_default'
x({param1:'a', param2:'b'}); //returns 'a', 'b'

这里实际发生的是我们从争论中解构。如果未提供任何参数,则使用默认值-= {}。 在这种情况下,因为默认的空对象没有字段,所以解构将采用默认值。