我在javascript中看到很多具有3个参数的函数,例如第二个参数它是一个值,第三个是函数,当你省略第二个参数时,发送第三个参数(函数) )像第二个参数;没有错误。它是如何工作的? 有些情况下第二个和第三个参数是函数并且这样做吗?这背后的架构是什么?
示例:
完整的3个参数:
client.query('SELECT $1::int AS number', ['1'], function(err, result) {
2个参数:
client.query('SELECT * from accounts', function(err, result)
第二个参数中带有null的3个参数:
client.query('SELECT * from accounts', null, function(err, result)
答案 0 :(得分:1)
在ES2015之前就有这样的方式:
function foo(param1, param2, param3){
if(!param2){
param2 = standard_value;
}
if(!param3){
param3 = standard_value;
}
if(typeof param2 === "function"){
param3 = param2;
}
// do stuff
}
使用ES2015,您可以使用:
function foo(param1, param2 = standard_value, param3 = standard_value){
if(typeof param2 === "function"){
param3 = param2;
}
// do stuff
}
答案 1 :(得分:0)
所以基本上你的函数查询中的第二个参数是可选的。
client.query('SELECT $1::int AS number', ['1'], function(err, result) {});
你可以传递它,也可以不传递它,order function
在这样的cases
中不会被错误匹配。在继续进行之前,请检查typeof argument
是否为connection.query
。
所以你基本上是在查看mysql的createQuery
。如果你看一下mysql的源代码,你可以查看Connection.createQuery = function createQuery(sql, values, callback) {
//look below on how they are handling values
if (typeof values === 'function') {
cb = bindToCurrentDomain(values);
} else if (values !== undefined) {
options.values = values;
}
}
函数如何处理它。
https://github.com/mysqljs/mysql/blob/2aa8b6c8ea2eb93d4d2afa42920362b707e39aed/lib/Connection.js#L37
<div ng-controller="MyCtrl">
<ul>
<li>
<span ng-click="showChilds(items[0])">{{items[0].name}}</span>
<ul>
<li ng-repeat="subItem in items[0].subItems" ng-show="items[0].active">
<span>---{{subItem.name}}</span>
</li>
</ul>
</li>
<li>
<span ng-click="showChilds(items[1])">{{items[1].name}}</span>
<ul>
<li ng-repeat="subItem in items[1].subItems" ng-show="items[1].active">
<span>---{{subItem.name}}</span>
</li>
</ul>
</li>
</ul>
</div>