JavaScript修改函数参数和使用函数
JavaScript alter function arguments and use for function.apply
我定义了一个console.log
的替代品,它基本上在日志的开头添加了一个全局int变量。
在函数中,我向后迭代arguments
数组,直到index等于1,并将每个元素向前移动一个。
然后我在索引1处添加全局int值,并改变索引0处的格式字符串,以尊重新的参数。
当这样做时,console.log
使用新的格式字符串和参数,但似乎忽略了第二个-原来是第一个-格式参数。
所以我创建了一些测试函数来比较它们的输出行为:
var globalInt = 25;
function log() {
if (arguments.length > 0 && arguments[0].length > 0) {
var keys = Object.keys(arguments);
for (var i = keys.length - 1; i > 0; i--) {
arguments[parseInt(keys[i]) + 1] = arguments[keys[i]];
}
arguments['0'] = '%d: ' + arguments['0'];
arguments['1'] = globalInt;
}
console.log(' %s', JSON.stringify(arguments));
console.log.apply(console.log, arguments);
}
function log_t1() {
console.log(' %s', JSON.stringify(arguments));
console.log.apply(console.log, arguments);
}
function log_t2() {
if (arguments.length > 0 && arguments[0].length > 0) {
arguments[0] = '%d: ' + arguments[0];
}
console.log(' %s', JSON.stringify(arguments));
console.log.apply(console.log, arguments);
}
log('test "%s"', 'hello world');
log_t1('%d: test "%s"', globalInt, 'hello world');
log_t2('test "%s"', globalInt, 'hello world');
>>
{"0":"%d: test '"%s'"","1":25,"2":"hello world"}
25: test "%s"
{"0":"%d: test '"%s'"","1":25,"2":"hello world"}
25: test "hello world"
{"0":"%d: test '"%s'"","1":25,"2":"hello world"}
25: test "hello world"
比较这些函数,它们的调用,它们的输出,特别是相等的JSON打印,我真的很想知道第一个结果。
有人能看到代码中的任何问题或可以确认此行为吗?
您没有更改arguments
对象的length
属性。arguments
对象不是一个简单的数组,它是不同的,并且在过度索引时不会改变它自己的长度属性。
我建议您首先将arguments对象转换为数组,并优先使用数组方法而不是循环:
var globalInt = 25;
...
function log() {
var args = Array.prototype.slice.call(arguments, 0);
if (args.length > 0 && args[0].length > 0) {
args = ['%d: ' + args[0], globalInt].concat(args.slice(1));
}
console.log(' %s', JSON.stringify(args));
console.log.apply(console, args);
}
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 为什么不'我们在javascript中使用函数参数的数据类型
- 使用闭包共享构造函数参数
- 函数参数的值错误
- 当一个重要的构造函数参数丢失时应该发生什么
- 阻止ReSharper将JavaScript函数参数放到新行中
- 根据函数参数将CSS值存储在var中,然后对其进行操作
- 使构造函数参数具有ES6类方法的特权
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- Windows.Networking.EndpointPair构造函数参数
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- 大括号中的Javascript函数参数
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- 将JSON字符串转换为函数参数
- eval()读取函数参数有多糟糕
- Javascript不能在一个命令中使用函数参数
- 函数参数在内部不可见,返回新的Promise(函数(resolve,reject).传递给被promise化的函数的
- ES6类构造函数参数
- 是否可以在javascript函数参数列表中调用多个函数