我有一个带有2个参数的函数,无论是否在括号中指定了第二个参数,它都应该有效。基本上,如果它被分配,那么做一些事情,如果不做其他事情或只是不打扰它。
vf.showHide = function (trigger, target) {
var $trigger = $(trigger),
trigParent = $trigger.parent(),
trigDataView = $trigger.data('view'),
numShown = $trigger.data('showalways'),
basketSubtotalElem = $('.subtotal .monthlyCost span.price, .subtotal .oneOffCost span.price, .subtotal label h3, .vat *');
target = target || null; // This is the 2nd parameter but I don't know if this right...
trigParent.delegate(trigger, 'click', function (e) {
var elem = $(this);
target = $(elem.attr('href'));
e.preventDefault();
if (trigDataView === 'showhide') {
if($('.filterBlock')){
if (target.is(':visible')) {
target.hide();
elem.find('span').removeClass('minus').addClass('plus');
} else {
target.show();
elem.find('span').removeClass('plus').addClass('minus');
}
}
}
});
}
因此,如果函数被调用如下:vf.showHide('a', 'div')
它可以工作,如果用1参数调用它:vf.showHide('a')
它应该仍然可以工作并抛出错误。
非常感谢
答案 0 :(得分:2)
调用函数时,如果传递的参数少于预期,则省略的参数将被赋予undefined
值。所以在你的情况下:
vf.showHide = function(trigger, target) {
if (target === undefined) {
//target parameter is not passed any value or passed undefined value
//add code to process here, e.g. assign target a default value
}
}
target = target || null
:如果target
被评估为false
,则会将其分配给null
。请注意,空字符串,零数字(0),NaN
,undefined
,null
,false
将计算为false
。所以请小心写下这样的代码。
答案 1 :(得分:1)
target = target || null
会奏效。
你在这里做的是在函数范围内声明一个局部变量。
在每个函数中,创建与参数名称对应的局部变量以保存传入的值。
如果未传入参数,则它将保留为“未定义”的局部变量。
function (a, b) {
//a, b are declared.
}
target = target || null
所做的只是为声明的局部变量赋值它使用||
表达式:
||
表达式的值由第一个操作数返回true
确定。
true || 2
的价值为true
false || 2
的价值为2