Javascript范围的奇怪行为

时间:2016-01-20 15:44:25

标签: javascript node.js

我编写了一段代码,对于给定的用户数组的每个条目,应调用修改此类用户的函数并发送有关其成员资格到期的电子邮件。

奇怪的行为(我很确定我得到了范围如何工作)是两个:

  1. 如果我没有将users[i]分配给foo,则行ldapclient.modify(users[i].dn, change, function(err) {确实知道users[i]是什么,但功能没有(“错误,无法读取未定义的属性'cn'“

  2. 如果我指定foo,该函数运行正常 - 但是,sendMail的结果总是相同的(如果我有4个不同的用户,将有4个发送的电子邮件相同并发送到一个用户)

  3. 这是代码段

    for ( var i = 0; i < users.length; ++i ){
        var foo = users[i];
    
        ldapclient.modify(foo.dn, change, function(err) {
           log.info({change: change, err: err}, 'Modifying Membership');
           assert.ifError(err);
    
           //send mail accordingly
           var mailmessage = {
             to:      foo.cn+" <"+foo.mail+">",
             subject: "Your membership has expired",
             text:    "Hi "+foo.cn+", \n your membership for the body " + foo.body + " \
                        has been suspended after automatic expiration"
           };
           mail.sendMail(mailmessage);
    }
    

    我非常肯定已经理解了匿名函数的范围和魔力,异步函数,回调函数以及使节点变得“酷”的任何东西,但这(主要是我的观点2)只是破坏了我的所有信念。

0 个答案:

没有答案