在函数中调用函数——Javascript

在函数中调用函数——Javascript,javascript,function,Javascript,Function,我试图在另一个函数中调用一个函数。我创建了两个任意字符串,与用户创建的用户名和密码相匹配。我的第一个函数是一个登录函数,提示用户创建用户名和密码。完成后,我将调用authenticate函数以确保用户创建的用户名和密码与任意字符串匹配。然而,我一直得到一个“用户名”没有在身份验证函数中定义,我可以理解为什么,但我仍然有问题。任何帮助都将不胜感激 var arbName = "wolverine"; var arbPass = "marvel"; function login(){ va

我试图在另一个函数中调用一个函数。我创建了两个任意字符串,与用户创建的用户名和密码相匹配。我的第一个函数是一个登录函数,提示用户创建用户名和密码。完成后,我将调用authenticate函数以确保用户创建的用户名和密码与任意字符串匹配。然而,我一直得到一个“用户名”没有在身份验证函数中定义,我可以理解为什么,但我仍然有问题。任何帮助都将不胜感激

var arbName = "wolverine";
var arbPass = "marvel";

function login(){
    var userName = prompt ('enter username');
    var passWord = prompt ('enter password');
    authenticate (userName, passWord);
};

function authenticate(){
    if (userName === arbName && passWord === arbPass){
       alert ('true');
    }else {
       alert ('false');
    }
};
    login();

您将用户名和密码作为参数传递给函数,但在接收函数中不使用参数。将它们作为命名参数添加到函数声明中:

function authenticate(userName, passWord){
// Here --------------^^^^^^^^^^^^^^^^^^
    if (userName === arbName && passWord === arbPass){
       alert ('true');
    }else {
       alert ('false');
    }
}

旁注:函数声明不是语句,它们不需要用
终止(尽管这样做是无害的)。以下是创建函数的三种标准(目前)方法:

函数声明(发生在作用域中的任何代码运行之前,没有分号,必须位于全局或函数作用域的顶层[例如,如果
while
或类似内容,则不能直接位于与
关联的块内):

匿名函数表达式(在逐步计算代码时遇到);示例:

var f = function() {
    // ...
};

var obj = {
    f: function() {
    }
};

bar(function() {
});
ES6定义了这些函数可以获得名称的规则,这些规则现在由一些引擎实现,但理论上上述函数没有名称

命名函数表达式(NFE)(与匿名表达式类似,但函数有名称):


谢天谢地,一些较旧的引擎现在正在衰退。

您必须将用户名密码作为功能验证的输入参数

像这样:

function authenticate(userName, passWord){
    //your logic goes here
}

你应该阅读一些变量范围的知识,知道哪些变量可以从何处访问。非常肯定!谢谢!问题解决了。谢谢你的旁注。我一直在使用chrome代码段,所以我的函数后面没有分号的问题,但很高兴知道谢谢,非常感谢:)
var f = function foo() {
    // ...
};

var obj = {
    f: function foo() {
    }
};

bar(function foo() {
});
function authenticate(userName, passWord){
    //your logic goes here
}