
我们有一个函数:
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'});