为什么在尝试创建一个使用用户名缩写生成随机代码的系统时,提示输入用户名的提示失败?

时间:2019-02-12 16:26:53

标签: javascript

我正在尝试创建一个脚本,该脚本可以由我们学区的秘书在浏览器中运行。基本上,他们将输入一个新的学生或新员工的姓名,并获得8位数字的输出,6位数字的随机数,并在末尾添加用户首字母缩写。他们会将其复制到我们的系统中,并且唯一的代码将启动自动创建帐户。我们已经设置好帐户,并且可以正常工作,但是很难获得唯一的代码。我没有包括脚本的随机数部分,因为我唯一的问题在于提示用户名并提取缩写。

function ID() {
    var userName = prompt("Please enter your name", "<User Name>");
}

function getInitials(name) {
  let initials = "";
  let waitingForSpace = false;

  for (var i = 0; i < name.length; i++) {
    if (!waitingForSpace) {
      initials += name[i];
      waitingForSpace = true;
    }

    if (name[i] === " ") {
      waitingForSpace = false;
    }
  }

  return initials;
}
console.log(getInitials(userName));


我想我应该提示输入用户名,该用户名存储为userName。然后将其用于getInitials。但是,当我尝试运行Node Initials.js时,我得到...

  

ReferenceError:未定义userName
      在对象。 (/Users/dross/Documents/UserID/Initials.js:22:25)
      在Module._compile(内部/模块/cjs/loader.js:689:30)
      在Object.Module._extensions..js(internal / modules / cjs / loader.js:700:10)
      在Module.load(internal / modules / cjs / loader.js:599:32)
      在tryModuleLoad(internal / modules / cjs / loader.js:538:12)
      在Function.Module._load(internal / modules / cjs / loader.js:530:3)
      在Function.Module.runMain(内部/模块/cjs/loader.js:742:12)
      启动时(internal / bootstrap / node.js:283:19)
      在bootstrapNodeJSCore(internal / bootstrap / node.js:743:3)

2 个答案:

答案 0 :(得分:1)

您的代码中缺少}。您可以将代码更改为以下内容:

function getUserName() {
  var userName = prompt("Please enter your name", "<User Name>");
  return userName; // return the entered name
}

function getInitials(name) {
  let initials = "";
  let waitingForSpace = false;

  for (var i = 0; i < name.length; i++) {
    if (!waitingForSpace) {
      initials += name[i];
      waitingForSpace = true;
    }

    if (name[i] === " ") {
      waitingForSpace = false;
    }
  }

  return initials;
}

var name = getUserName(); // returns the name entered
console.log(getInitials(name));

答案 1 :(得分:0)

在您的原始帖子中,您实际上是作为闭包交付了整个功能,因此内部的“用户名”功能在外部可用。顺便说一句,我不认为缺少'{'。

现在,在修改后的代码中,您已经将“用户名”作为本地变量,因为不再为它分配“功能”。因此,现在在外面“未定义”。

我认为您应该注意Peter B的评论,指出您必须将(原始)函数称为 console.log(getInitials(userName()));