【问题标题】:javascript unassigned default function parametersjavascript未分配的默认函数参数
【发布时间】:2012-08-13 20:54:11
【问题描述】:

在以下函数中:

foo = function(a){
    if (!a) a = "Some value";
    // something done with a
    return a;
}

当“a”未声明时,我想为函数的其余部分分配一个默认值,虽然“a”是一个参数名称并且没有声明为“var a”,但它是这个的私有变量吗?功能?执行函数后,它似乎没有显示为全局变量,这是标准(即一致)的可能用途吗?

【问题讨论】:

  • 函数签名中提供的任何参数都仅限于函数。您作为示例编写的函数是正确的。
  • 一个常见的简写是return a || "Some value" 而不是if(!a) a = "some value"; return a;
  • 更好用if(typeof a == "undefined")

标签: javascript node.js optional-parameters


【解决方案1】:

它是函数范围内的私有变量。它对全局范围“不可见”。
至于你的代码,你最好这样写

foo = function(a){
    if (typeof a == "undefined") a = "Some value";
    // something done with a
    return a;
}

因为!a 可以为0 为真,空字符串'' 或只是null

【讨论】:

  • 好点。 a = a || "some value"if(!a) 有相同的缺点。
  • a 将始终是一个对象或未定义,但是是的点
【解决方案2】:

是的,在这种情况下,a 在函数内部有一个作用域。您甚至可以使用它来覆盖本地范围的全局变量。例如,您可以使用function ($){....}(JQuery);,这样您就知道$ 将始终是JQuery 框架的变量。

【讨论】:

    【解决方案3】:

    参数始终具有私有函数范围。

    var a = 'Hi';
    foo = function(a) {
        if (!a) a = "Some value";
            // something done with a
            return a;
        };
    console.log(a); // Logs 'Hi'
    console.log('Bye'); // Logs 'Bye'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 2017-12-07
      • 2017-09-19
      相关资源
      最近更新 更多