admin管理员组文章数量:1315025
Is the following function legal and portable?
function(_, _, x){
return x;
}
Sometimes I want to write a callback that doesn't use the leftmost parameters so I wonder what is the most concise way to do so.
Conclusion:
function(_1, _2, x)
is probably as short as it gets then.
Is the following function legal and portable?
function(_, _, x){
return x;
}
Sometimes I want to write a callback that doesn't use the leftmost parameters so I wonder what is the most concise way to do so.
Conclusion:
function(_1, _2, x)
is probably as short as it gets then.
- If your callback sometimes doesn't use the leftmost arguments, but always uses the rightmost one, why not promote that argument to first position and omit the other two in your calls? – Frédéric Hamidi Commented Jul 27, 2011 at 23:24
- 1 If you don't use those parameters, then why have them? – Matt R. Wilson Commented Jul 27, 2011 at 23:24
- 1 @Frédéric I'm guessing they're using some kind of API where you provide a callback function. – Phil Commented Jul 27, 2011 at 23:26
- 4 I can't change the signature of the callback because I didn't write the code that invokes it. – hugomg Commented Jul 27, 2011 at 23:26
-
+1 For a good question, and I was interested to see the answers. But although I can understand why you'd want to do this I'd be more inclined to go with the less concise but more obvious
function(notUsed1,notUsed2,x)
- or name the parameters for what they actually are and simply not use them. More readable, and you don't have to worry about it breaking in some obscure browser (or in strict mode of the popular browsers as per Šime's answer). – nnnnnn Commented Jul 27, 2011 at 23:44
5 Answers
Reset to default 9It is valid in non-strict mode code, but invalid in strict mode code:
It is a SyntaxError if any Identifier value occurs more than once within a FormalParameterList of a strict mode FunctionDeclaration or FunctionExpression.
Source: http://es5.github./#x13.1
Therefore, you may want to avoid this, since at one point in the future you will want to move on to strict mode...
You can use arguments
, but yes that will work:
function test(_, _, x){
console.log(arguments);
return x;
}
console.log(test('a','b','c'));
Outputs:
["a", "b", "c"]
c
http://jsfiddle/JdrDY/
And here is what it prints if you try to use the _
argument:
["a", "b", "c"]
b
c
http://jsfiddle/JdrDY/2/
var ignoreLeftParam = function(count, f) {
return function() {
f.apply(this, Array.prototype.slice.call(arguments, count));
}
}
ignoreLeftParam(2, function(x) {
return x;
});
Writing a general utility to ignore parameters might be considered neater.
If you're running into problems with this kind of function signature, try rewriting it to accept a single options
object with named properties. That way you can pass whatever bination of arguments you want.
E.g.:
function test(options) {
if('numberOfHands' in options)
console.log('I have ' + options.numberOfHands + ' hands!');
if('duration' in options)
console.log('I last for ' + options.duration);
}
Took me all of five seconds to test and apparently yes, this is legal.
Off topic
I can see why you may want to do this. Take jQuery's $.get()
method for example. Say your "success" callback function only had to use the third jqXHR
argument.
$.get('url', function(_, _, jqXHR) {
// only use jqXHR
});
Though you may as well name the first two arguments x
and y
.
本文标签: Am I allowed to repeat function parameter names in JavascriptStack Overflow
版权声明:本文标题:Am I allowed to repeat function parameter names in Javascript? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741973973a2408008.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论