JavaScript未赋值的默认函数参数

4
在以下函数中:
foo = function(a){
    if (!a) a = "Some value";
    // something done with a
    return a;
}

当“a”没有被声明时,我想为其分配一个默认值以在函数的其余部分中使用。尽管“a”是参数名称并未声明为“var a”,但它是否是该函数的私有变量?在函数执行后似乎没有出现作为全局变量,这是一种标准(即一致)的可能用法吗?

1
函数签名中提供的任何参数仅限于该函数。您编写的示例函数是正确的。 - mikefrey
1
一个常用的简写形式是 return a || "Some value",而不是 if(!a) a = "some value"; return a; - sissonb
2
最好使用 if(typeof a == "undefined") - unloco
3个回答

4

这是函数作用域内的私有变量,对于全局作用域来说是“不可见”的。
至于你的代码,最好写成这样:

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

因为!a可以对0、空字符串''或者null返回true。


1
好观点。a = a || "some value"if(!a) 有相同的缺陷。 - sissonb
1
a将始终是一个对象或未定义,但是我明白您的意思。 - daaanipm

0

参数始终具有私有函数作用域。

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'

0

是的,在这个上下文中,a 在函数内部有作用域。你甚至可以使用它来覆盖全局变量以创建一个本地作用域。例如,你可以这样做:function ($){....}(JQuery); 这样你就知道 $ 总是 JQuery 框架的变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接