gpt4 book ai didi

javascript - JSLint 测试版错误

转载 作者:行者123 更新时间:2023-11-29 14:47:59 25 4
gpt4 key购买 nike

对于下面的JS函数:

function cL() {

'use strict';

return console.log.apply(console, arguments);

}

我收到以下 JSLint 测试版错误:

Unexpected 'arguments'.
return console.log.apply(console, arguments);

在旧版本的 JSLint 中,我从来没有遇到过这个错误。
为什么新的 JSLint Beta 不喜欢这个,我该怎么做才能摆脱/抑制这个错误?

谢谢。

最佳答案

我需要一些时间来挖掘新的 JSLint Beta 版本中的变化。存东西后the same since last July康乐福刚changed jslint.js like mad about a week ago ,当测试版被推出时。我猜我们知道为什么他沉默了这么久。

但这是我在代码中挖掘确切位置时的快速版本:JSLint 根本不希望您依赖于arguments。它使代码(在 JSLint 看来)更难理解。

假设我们将您的代码更改为:

/*jslint white:true, devel:true */
function cL() {
'use strict';
console.log(arguments[0]);
return console.log.apply(console, arguments);
}

即使在 the old JSLint ,你会得到:

Use a named parameter.
console.log(arguments[0]);

JSLint 希望代码更改为使用命名参数,至少...

/*jslint white:true, devel:true */
function cL(p) {
'use strict';
console.log(p[0]);
return console.log.apply(console, p);
}

这也适用于测试版。请注意,我 (natch) 还更改了您对 p 的原始调用中的 arguments* 请在下面的注释中查看这意味着什么 JSLint确实遗漏了一些东西,当这些遗漏引起他的注意时,Crockford 将这些遗漏归入。

我不认为有忽略此问题的指令,但修复过程相当轻松。

顺便说一下,因为它让我更容易理解 JSLint 的思想,无论如何,请记住 JSLint's basic motivation is ...

When you intentionally write things that look like errors, it makes it much harder to find the real errors.

To find the needle, make your program look less like a haystack.

没有任何声明的参数然后通过 arguments 引用它们有点像大海捞针,至少从 JSLint 的 Angular 来看是这样。这是有道理的。 function fn() 至少意味着函数中没有使用重要的参数;您只需要关心闭包上下文。 function fn(p),虽然参数名很臭,但是用处更大。我知道有什么被传进来了,我会留意针头。 (插入 Arya Stark 引用资料。)


注意:请看下面的评论,我第一次完全没有解释。 arguments 是传递给函数的整个参数数组,这意味着arguments 替换为 p我的初始函数重写将在第一个参数之后删除任何内容

我假设 OP 可以将所有内容打包到一个数组中,而不是作为单独的参数发送,但这不是一个明显的假设,而且我没有明确假设这是正确的路线。

我的意思是:

  1. 使用 cL(arg1, arg2, arg3); 和我的 cL(p) 版本只会在 中有 arg1 p.
  2. var a = [arg1, arg2, arg3];cL(a); 会给出 OP 想要的内容,但需要先定义一个数组。
  3. cL([arg1, arg2, arg3]); 与前面的选项相同,但更简洁。

这是一个演示:

/*jslint white:true, devel:true */
function cL(p) {
'use strict';
if ("string" === typeof p) {
p = [p];
}
console.log("first arg: " + p[0]);
return console.log.apply(console, p);
}

var arg1 = "a",
arg2 = "b",
arg3 = "c";

cL(arg1, arg2, arg3); // only arg1 is passed. 'a' is all that's output

var a = [arg1, arg2, arg3];
cL(a); // all three argX vars are passed in an array. 'abc'

cL([arg1, arg2, arg3]); // ditto. 'abc'

这是输出(如果您使用的不是 IE9- 没有打开开发工具):

first arg: a
a
first arg: a
a b c
first arg: a
a b c

关于javascript - JSLint 测试版错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30135728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com