2

根据这个Mozilla 文档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);
});
4

2 回答 2

6

是的他们可以。你可以在 JavaScript 中做很多 JSLint 存在问题的事情

我不建议这样做,但你可以做到。

如果你真的,真的想这样做并通过jslint,你可以愚弄它:

var a = arguments;
a[1] = 'new value';

请注意,arguments函数中的任何命名参数之间的链接处于松散模式。例如:

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
于 2013-07-31T08:27:16.703 回答
1

是的,你可以这样做。JSLint 只是检查代码是否适用于某些编码规则的工具。创建这些规则是为了刺激编写好的 javascript 代码。

所以你可以使用它,但不建议这样做,因为它被认为是“坏”的 javascript 代码。

有关 JSLint 的更多信息:http: //www.jslint.com/lint.html

我认为 JSLint 不允许这样做的原因是,一般来说,程序员希望arguments变量包含传递给函数的参数。如果你操纵它,你就改变了程序员的“现实”。

您也许可以更好地将其分配给另一个变量:

var my_argument = arguments[1] || 'fallback_value';
于 2013-07-31T08:32:38.807 回答