javascript - JSlint:在函数范围内重新定义 i

标签 javascript jslint

当通过 JSLint 运行以下 Javascript 代码时:

    (function () {
        var i = 'a';

        console.log(i);

        function foo () {
            var i = 'b';
            console.log(i);
        }

        foo();

        console.log(i);

        foo();
    }());

我在 JSLint 中收到以下错误:

    #1 Redefinition of 'i' from line 4.
       var i = 'b'; // Line 7, Pos 13
    #2 Unused 'i'.
       var i = 'a'; // Line 4, Pos 9
    #3 Unused 'foo'.
        function foo () { // Line 6, Pos 14

我的问题:

  1. 为什么明明在调用foo()却说未使用?

  2. 为什么说函数作用域 var i = 'b' 是对它上面那个的重新定义

  3. 为什么说第一个 var i = 'a' 定义未被使用?

最佳答案

您将获得 i 的重新定义,因为它存在于两个范围内。

这本身并不是真正的问题,但 Crockford 认为这是一件事会引起混淆,因此他的工具可以捕捉到它。

关于javascript - JSlint:在函数范围内重新定义 i,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23301315/

相关文章:

javascript - JSLint(Javascript 验证程序网站)- 错误!隐含全局 :

javascript - 关闭: option to require var before new JS variables

javascript - 是否可以在 Javascript 中转发声明函数或方法?

javascript - 逐步使用 Node.js 创建自定义应用程序

javascript - 如何单击基于 ref 属性的按钮?

javascript - 按钮 Javascript 问题的文本输出

jslint - 如何修复 JSLint 不安全 ^ 错误?

javascript - 将 JSLint/Hint 与 requirejs 一起使用

javascript - 将事件绑定(bind)到 AJAX 填充的列表项

javascript - 使用 jQuery 检查链接是否仍然有效