2014-04-03 154 views
1

下面的list函数应该列出我的contacts数组中的人员姓名。为什么这个函数打印'undefined'?

var bob = { 
    firstName: "Bob", 
    lastName: "Jones", 
    phoneNumber: "(650) 777-7777", 
    email: "[email protected]" 
}; 

var mary = { 
    firstName: "Mary", 
    lastName: "Johnson", 
    phoneNumber: "(650) 888-8888", 
    email: "[email protected]" 
}; 

var contacts = [bob, mary]; 

function printPerson(person) { 
    console.log(person.firstName + " " + person.lastName); 
} 

var list = function() { 
    var contactsLength = contacts.length; 
    for (var i = 0; i < contactsLength; i++) { 
     console.log(printPerson(contacts[i])); 
    } 
}; 

list; 

然而,而不只是打印出鲍勃·琼斯和玛丽·约翰逊,我得到:

Bob Jones 
undefined 
Mary Johnson 
undefined 

有人能解释这是为什么?

回答

5

printPerson方法写入到控制台,但不会返回任何值,所以在您的for -loop,你必须:

for (var i = 0; i < contactsLength; i++) { 
    console.log(printPerson(contacts[i])); 
} 

它也努力的printPerson返回值写入控制台,这是undefined

为了解决这个问题,无论是拖放从for -loop console.logprintPerson返回一个值,而不是写控制台那里。

0

试试这个:

function printPerson(person) { 
    return person.firstName + " " + person.lastName; 
} 
0

printPerson功能写入控制台。它不会显式返回值。当没有显式返回值的函数运行时,它将返回undefined值。控制台在运行后总是尝试显示函数的返回值,如果未设置显式值,则返回值undefined

相关问题