2015-03-02 143 views
-1

我想调用另一个函数内的函数。我创建了两个任意字符串来匹配用户创建的用户名和密码。我的第一个功能是提示用户创建用户名和密码的登录功能。一旦完成,我将调用我的身份验证功能以确保用户创建的用户名和密码与任意字符串匹配。然而,我一直得到一个'userName'没有在authenticate函数中定义,我可以理解为什么,但我仍然有麻烦。任何帮助,将不胜感激。调用函数内的函数 - Javascript

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(); 
+3

你应该做一些阅读的变量范围要知道,这变量可以从那里访问。 – Sirko 2015-03-02 09:43:00

+0

绝对是!谢谢 – alexg 2015-03-02 10:03:46

回答

2

你传递的用户名和密码的功能参数,但你没有,那么使用参数的接收功能。它们作为命名参数添加到函数声明:

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

旁注:函数声明没有说明,他们并不需要用;被终止(虽然这是无害的,如果你这样做) 。这里有三个标准(现在)的方式来创建一个函数:

函数声明(发生在范围内的任何代码运行之前,别无分号,必须是在全球或功能范围[例如,可以在最高水平“T是直接与ifwhile或类似相关联的块)内:

function foo() { 
    // ... 
} 

匿名函数表达式(发生,当它在所述码的步骤一步的评价对所遇到);例子:

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

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

bar(function() { 
}); 

ES6定义规则,通过这些功能可以得到名字,这些规则是由一些发动机现已实现,但在理论上上面的功能没有名字。

命名函数表达式(NFE)(就像一个匿名之一,但温控功能得到了):

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

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

bar(function foo() { 
}); 

一些较旧的引擎get this wrong但他们现在正在衰落,幸运的是。

+0

谢谢!问题解决了。谢谢你的发言。我一直在使用chrome片段,所以我没有遇到过使用了分号码的问题,但我知道 – alexg 2015-03-02 10:02:26

0

你必须采取的userName密码作为函数身份验证输入参数。

这样的:

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

谢谢,非常感谢:) – alexg 2015-03-02 10:02:44