zoukankan      html  css  js  c++  java
  • no-shadow (Rules) – Eslint 中文开发手册

    [
  •   Eslint 中文开发手册

    no-shadow (Rules) - Eslint 中文开发手册

    阴影是局部变量与其包含范围内的变量共享相同名称的过程。例如:

    var a = 3;
    function b() {
        var a = 10;
    }

    在这种情况下,a内部的变量b()会映射a全局范围中的变量。这会在阅读代码时造成混淆,并且无法访问全局变量。

    规则细节

    该规则旨在消除阴影变量声明。

    此规则的错误代码示例:

    /*eslint no-shadow: "error"*/
    /*eslint-env es6*/
    
    var a = 3;
    function b() {
        var a = 10;
    }
    
    var b = function () {
        var a = 10;
    }
    
    function b(a) {
        a = 10;
    }
    b(a);
    
    if (true) {
        let a = 5;
    }

    选项

    这条规则从一个选项,对象,具有属性"builtinGlobals","hoist"和"allow"。

    {
        "no-shadow": ["error", { "builtinGlobals": false, "hoist": "functions", "allow": [] }]
    }

    builtinGlobals

    该builtinGlobals选项是false默认的。如果它是true:,该规则防止在内置全局变量的阴影Object,Array,Number,等等。

    选项的错误代码示例{ "builtinGlobals": true }:

    /*eslint no-shadow: ["error", { "builtinGlobals": true }]*/
    
    function foo() {
        var Object = 0;
    }

    hoist

    该hoist选项有三个设置:

    functions (默认情况下) - 在定义外部函数之前报告遮蔽。all - 在定义外部变量/函数之前报告所有阴影。never - 在定义外部变量/函数之前从不报告阴影。

    hoist: functions

    不正确的代码为默认{ "hoist": "functions" }选项的示例:

    /*eslint no-shadow: ["error", { "hoist": "functions" }]*/
    /*eslint-env es6*/
    
    if (true) {
        let b = 6;
    }
    
    function b() {}

    虽然let b在if声明中是在外部作用域中的函数声明之前,但它是不正确的。

    默认选项的正确代码示例{ "hoist": "functions" }:

    /*eslint no-shadow: ["error", { "hoist": "functions" }]*/
    /*eslint-env es6*/
    
    if (true) {
        let a = 3;
    }
    
    let a = 5;

    因为let a在声明中在外部范围中if的变量声明之前,所以是正确的。

    hoist: all

    选项的错误代码示例{ "hoist": "all" }:

    /*eslint no-shadow: ["error", { "hoist": "all" }]*/
    /*eslint-env es6*/
    
    if (true) {
        let a = 3;
        let b = 6;
    }
    
    let a = 5;
    function b() {}

    hoist: never

    选项的正确代码示例{ "hoist": "never" }:

    /*eslint no-shadow: ["error", { "hoist": "never" }]*/
    /*eslint-env es6*/
    
    if (true) {
        let a = 3;
        let b = 6;
    }
    
    let a = 5;
    function b() {}

    因为let a并且let b在if声明中是在外部范围的声明之前,所以它们是正确的。

    allow

    该allow选项是允许进行遮蔽的标识符名称的数组。例如"resolve","reject","done","cb"。

    选项的正确代码示例{ "allow": ["done"] }:

    /*eslint no-shadow: ["error", { "allow": ["done"] }]*/
    /*eslint-env es6*/
    
    import async from 'async';
    
    function foo(done) {
      async.map([1, 2], function (e, done) {
        done(null, e * 2)
      }, done);
    }
    
    foo(function (err, result) {
      console.log({ err, result });
    });

    Further Reading

    Variable ShadowingRelated Rulesno-shadow-restricted-names

    版本

    该规则在 ESLint 0.0.9 中引入。

    资源

    Rule sourceDocumentation source

  •   Eslint 中文开发手册
    ]
    转载请保留页面地址:https://www.breakyizhan.com/javascript/34434.html
  • 相关阅读:
    Java基础12-继承(思想、覆盖、super,子类初始化)
    Java基础11-封装(思想、访问权限、this、构造方法)
    Java基础10-方法的重载与递归
    Java基础9-java的类、对象和方法
    Java基础8-浅谈java程序的运行机制与JVM运行
    Java基础7-数组
    Java基础6-控制语句
    Java基础5-运算符
    python socket编程基础
    python 之 异常处理
  • 原文地址:https://www.cnblogs.com/breakyizhan/p/13238274.html
Copyright © 2011-2022 走看看