Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有默认参数的JavaScript函数_Javascript_Function - Fatal编程技术网

具有默认参数的JavaScript函数

具有默认参数的JavaScript函数,javascript,function,Javascript,Function,我目前使用以下函数检查三个参数,以查看是否有任何传递,如果没有发送参数,这是在设置默认值时执行此操作的最佳方法吗 function setupSlideshow(t, e, s) { e = e || '.slideshow'; s = s || '> li'; t = t || 70; $timeout(function() { $(e).cycle({ swipe: true, slides

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

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('.newslideshow')不起作用

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

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

setupSlideshow('.new-slideshow');
这里的参数被传递给函数中的
t
变量

您要做的是:

setUpSlideshow(false, '.new-slideshow', '.slide');
这会将
false
传递给
t
变量,并将其更改为默认值

可选地,您可能需要考虑使用“选项”/“参数”对象:…p>

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 );

我想你已经忘记了,参数总是要按顺序输入的。。。这里,第一个参数是超时的时间(毫秒),第二个参数是slideshow元素。如果您将时间完整性设置为ommit,则slideshow元素将是第一个参数,因此函数会将其视为您的时间

jQuery使用的一种方法是使用一个
选项
参数。这包括传递一个对象供函数使用,如下所示:

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'});

使用这种技术对这种用法很有用,但是如果有太多的选项,并且没有很好的文档记录,那么也可能会成为一个问题制造者,所以请保持它的整洁和注释:)

就我有限的JS而言,我想我已经有了这个

当前您编写的
e=e | | |'。幻灯片'
您试图将
e
作为变量访问,但是,浏览器将其解释为参数。将其更改为以下内容:


变量e=e | |'。幻灯片',
s=s | |'>li',
t=t | 70;

查看以下实现。有了默认的参数“features=[]”,代码在ES6中可以变得非常简洁

ES6:新的

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

setUserAccess(); // []
旧的

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

setUserAccess(); // []

具有如下默认参数的旧函数方式:

function x(param1, param2){
  param1 = param1 || 'param1_default';
  param2 = param2 || 'param2_default';
  console.log(param1, param2);
  //etc
}
更好的方法是:

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'
这里实际发生的是,我们对参数进行解构。如果未提供参数,则使用默认参数-即={}。
在这种情况下,因为默认的空对象没有字段,所以解构将采用默认值。

不,这部分是可以的。它所做的是评估“e”的值如果它是真的,它的值被分配,否则正确的部分将评估为真,然后用作分配的值。您有任何问题或评论,或者我们的答案对您有帮助吗?欢迎反馈或接受回答。