来自外部范围的Javascript函数

问题描述 投票:1回答:1

[大家好,我是JavaScript新手,我有一个问题。我有validator.js文件,可在其中验证电子邮件,密码和请求。这是

/**
 * Simple regex validator for email
 * @param email The email
 * @returns {boolean} Whether the email matches the regex
 */
function email(email) {
    const regExp = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return regExp.test(email);

}

/**
 * Simple regex validator for password
 * @param password The password
 * @returns {boolean} Whether the password matches the regex
 */
function password(password) {
    const regExp = /^(?=.*\d).{7,15}$/;
    return regExp.test(password);
}

const request = {
    email: {
        message: '',
        validate: function (req) {
            const email = req.body.email;
            if(!email){
                email.message = 'Email is required';
                return false;
            }
            if(!validator(email(email))){
                email.message = 'Email is not valid';
                return false;
            }
            return true;
        }
    }
};

module.exports = {
    email,
    password,
    request
};

我想在电子邮件的验证功能中使用email(email)函数,但是阴影可变,如何实现?

javascript variables scope shadow
1个回答
0
投票

您不能直接访问阴影变量。除非您对此值有其他处理,否则不会。

最好的解决方案就是不要遮挡。

或者,更改您的电子邮件地址变量的名称:

const emailAddress = req.body.email;

或更改电子邮件验证功能的名称:

function validateEmail(email) {

或更妙的是,为清楚起见,请同时做这两项。


这就是我所说的“其他句柄”。

function email(email) { /* ... */ }
function password(password) { /* ... */ }

const validators = { email, password }

function doStuff() {
  const email = req.body.email;
  validators.email(email)
}

在这种情况下,我们已经遮盖了局部变量email,但是我们已经将email函数分配给了另一个我们仍然可以访问的对象。


但是,总的来说,阴影是不好的,应该尽最大努力避免它。

© www.soinside.com 2019 - 2024. All rights reserved.