我目前使用以下函数检查三个参数是否有任何传递,如果没有参数发送,这是设置默认值的最佳方法吗?
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');
答案 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'
这里实际发生的是我们从争论中解构。如果未提供任何参数,则使用默认值-= {}。 在这种情况下,因为默认的空对象没有字段,所以解构将采用默认值。