簡體   English   中英

可以覆蓋參數嗎?

[英]Can arguments be overwritten?

根據這個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);
});

是的他們可以。 您可以在JSLint遇到的JavaScript中做很多事情。

我不建議這樣做,但是您可以做到。

如果你真的,真的想這樣做並傳遞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

是的,你可以做到這一點。 JSLint只是檢查代碼是否適用於某些編碼規則的工具。 創建這些規則是為了激發編寫好的javascript代碼。

因此,您可以使用它,但不建議使用它,因為它被視為“錯誤的” JavaScript代碼。

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

我認為JSLint不允許這樣做的原因是因為一般來說,程序員會期望arguments變量包含傳遞給函數的參數。 如果您對此進行操作,則將更改程序員的“現實”。

您可能最好將其分配給另一個變量:

var my_argument = arguments[1] || 'fallback_value';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM