根据此mozilla document,可以设置arguments
:
arguments[1] = 'new value';
但我的jshint
拒绝接受。可以设置参数吗?
这就是我现在要做的事情:
Handlebars.registerHelper('propPartial', function(property, options) {
var name = Ember.Handlebars.get(this, property);
// I have to do this because arguments[0] = name; does not work, contrary to what is stated here:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments
var args = [], i, l;
args.push(name);
for (i = 1, l = arguments.length; i < l; i++) {
args.push(arguments[i]);
}
return Ember.Handlebars.helpers.partial.apply(this, args);
});
感谢@TJCrowder,这是工作代码,愚弄jshint
:
Handlebars.registerHelper('propPartial', function(property, options) {
var name = Ember.Handlebars.get(this, property);
var args = arguments;
args[0] = name;
return Ember.Handlebars.helpers.partial.apply(this, args);
});
答案 0 :(得分:6)
是的,他们可以。您可以在JSLint遇到问题的JavaScript中执行批次。
我不建议,但你可以做。
如果你真的想要这样做并通过jslint
,你可以欺骗它:
var a = arguments;
a[1] = 'new value';
请注意,arguments
与函数中任何命名参数之间的链接在松散模式下为 live 。 E.g:
function foo(a, b) {
arguments[1] = "x"; // This line changes `b`
console.log("a = " + a);
console.log("b = " + b);
}
foo(1, 2);
输出
a = 1 b = x
在严格模式下,他们不会保持联系:
function foo(a, b) {
"use strict";
arguments[1] = "x"; // This line does *not* change `b`
console.log("a = " + a);
console.log("b = " + b);
}
foo(1, 2);
输出
a = 1 b = 2
答案 1 :(得分:1)
所以你可以使用它,但不建议,因为它被称为“坏”的javascript代码。
有关JSLint的更多信息:http://www.jslint.com/lint.html
我认为JSLint不允许这样做的原因是因为一般来说,程序员会期望arguments
变量包含传递给函数的参数。如果你操纵它,你就改变了程序员的“现实”。
您可以更好地将其分配给另一个变量:
var my_argument = arguments[1] || 'fallback_value';