2015-03-02 142 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