javascript函数传参的坑

我们有一个函数:

const f = function(a) {
    console.log(a);
}

我调用这个函数时,需要用f('这是参数');来给函数的变量a赋值。很简单对吧?我们加一些难度:

const f = function(a, b) {
    console.log(a);
    console.log(b);
}

也很简单,我给函数设置了两个参数。下面我来给变量a设置一个默认值,该怎么做呢?

const f = function(a = '默认值a', b) {
    console.log(a);
    console.log(b);
}

执行f('这是参数');,你觉得会得到什么结果?我得到了“默认值a”和“这是参数”,显而易见,我传入的参数赋值给了变量b,而变量a则使用了默认值。

同样是上面那个函数,我执行f('这是参数', '这也是参数');,你猜这次会得到什么?会显示“这是参数”和“这也是参数”,a的默认值被我传入的参数替换掉了。

下面我给b也整个默认值:

const f = function(a = '默认值a', b = '默认值b') {
    console.log(a);
    console.log(b);
}

执行f('这是参数');,又会得到啥?得到了“这是参数”和“默认值b”。那么问题来了,这种方式很乱,同样是用f('这是参数');给函数传参,但是会因为默认值的问题而产生不同的效果。那么有没有一种方法,可以告诉函数这个值对应的是这个参数?

尝试f(b:'这是参数');,得到了错误说语法有误。那我尝试像python那样传参,f(b='这是参数');,得到了另一个错误说找不到变量b。语法错误好理解,说明js不支持这种写法;而后面的找不到变量b是什么意思呢?意思是程序先给变量b赋了一个值“这是参数”,然后把变量b当作参数传给了这个函数。咱上面没有定义过变量b是个啥东西,所以程序找不到就报错啦。

回到正题,我要指明这个值对应这个参数的话,我该怎么做呢?很抱歉的告诉你,javascript并不支持这样的一种操作方式。希望亲爱的读者朋友在这里可以和我一起用国粹问候一下jajvascript的作者们。但我们还是有一些方法来实现这样一个效果的。

一个值对应一个参数,你有没有想到什么?对了,那就是字典,咱们可以通过传入一个字典来实现这样一个效果。事实上,在面对这样一个需求时,各个程序员都不约而同的使用了传入字典的方式。

const f = function(request) {
    console.log(request[a]);
    console.log(request[b]);
}

f({'a': '这是参数a', 'b': '这是参数b'});

阅读更多

留下评论

您的电子邮箱地址不会被公开。