[英]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.