【问题标题】:jquery/javascript missing ) after formal parametersjquery/javascript 缺少) 形式参数后
【发布时间】:2011-08-08 12:40:32
【问题描述】:

您好,我有这个代码:

function getFullnameDetails(mainHeight,upperstyle,type=''){
    setTimeout(function(){fullnameCenter(mainHeight,upperstyle,type='')},2000);
}
function fullnameCenter(mainHeight,upperstyle,type=''){
    var distOfMainAndUpper = mainHeight - upperstyle;
    var mainHalfHeight = mainHeight/2;
    var imageHeight = jQuery("img[rel='fullname']").height(); //there is a delay
    var imageHalfHeight = imageHeight/2;
    var fromImageTopToMainHalf = mainHalfHeight - imageHeight;
    var position = imageHalfHeight+fromImageTopToMainHalf-distOfMainAndUpper;
    if(type == 'big'){ jQuery("#temp .test1").css("bottom",position+"px"); }
    else { jQuery(".test1").css("bottom",position+"px"); }


}

它说我在形式参数之后缺少 ) 。 这发生在这一行:

function getFullnameDetails(mainHeight,upperstyle,type=''){ //IT HAPPENS HERE! :)
    setTimeout(function(){fullnameCenter(mainHeight,upperstyle,type='')},2000);
}

我在这里做错了什么。

提前感谢您的帮助:)

【问题讨论】:

    标签: javascript jquery function


    【解决方案1】:

    Javascript 不支持默认函数参数值。

    你可以做这样的事情(但要警惕意外的“虚假”值):

    function getFullnameDetails(mainHeight,upperstyle,type){
      type = type || ''; // if type is 'falsey' (null, undefined, empty string) assign ''
      //...
    }
    

    【讨论】:

    • 相反,您可以使用arg = arg || 'default value'; 进行短路评估。
    • @Elson Solano:我发布了一个解决方案,即使使用 'falsey' 值也可以工作,这可能会对您有所帮助。
    【解决方案2】:

    正如其他答案所指出的,JavaScript 不支持函数参数中的默认值。然而,正如在其他解决方案中所指出的那样,当传递虚假值时,使用内联 || 将不起作用(例如 null0''NaNfalse)。更好的解决方案是检查参数是否未定义:

    type = typeof(type) !== 'undefined' ? type : '';

    或者,更一般地说:

    argument_name = typeof(argument_name) !== 'undefined' ? argument_name : default_value;

    当然,这意味着将 undefined 传递给函数将意味着使用默认值 - 但这应该很少见。

    【讨论】:

    • 嗯?当传递虚假值时,使用内联 || 是否 工作(使用字符串)......? undefined 在逻辑上是错误的。你必须小心的是例如布尔和整数参数,其中 false0 的值(您可能想要传递)将被评估为 false。带有一个无关紧要的字符串参数。
    • || 将适用于字符串,但仅当您要分配的默认值为 '' - 如果您想要其他默认值,但希望能够传入 '' ,然后|| 会中断。在我看来,!== 'undefined' 方法更安全,因为您不需要确保传递正确的类型,并且如果有人将模式复制到其他地方,也不会出现意外的怪异现象。
    【解决方案3】:

    你是想像默认参数一样使用吗?

    type=''

    这是无效的——你不能在这样的函数的参数列表中使用等号。

    【讨论】:

    • @Joseph:您的示例显示了参数之间的赋值表达式,而不是参数列表中的赋值表达式。
    • @patrickdw 啊,我明白了。误解了发生了什么。 :P 谢谢指正!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多