关于函数里面的Javascript函数的解释?

时间:2013-09-25 17:06:59

标签: javascript node.js

我已经学习了一段时间的js,我几乎了解它的主要概念,比如原型,oop ......但是我无法理解它是如何工作的:

User.findOne().where('socialid').equals(id).where('socialnetwork').equals(snw).exec(function (arr,data) {
    if(data){
    res.send(data);
    }
});

我不明白的是数据 arr 变量如何传递到 exec()<中的函数 / em>功能。是关闭吗?任何人都可以提供一个更简单直观的例子,它是如何在幕后执行的吗?

已编辑:实际上,我确实理解回调行为,我无法理解数据应该是 User.findOne()的结果.... 不是来自 exec()的回调函数,它只将新函数传递给 exec(),正如我在代码。

非常感谢

4 个答案:

答案 0 :(得分:4)

exec的源代码如下所示:

function exec(someCallback) {
    // ...
    var arr = /* ? */;
    var data = /* ? */;

    someCallback(arr, data);
    // ...
}

答案 1 :(得分:2)

返回一个值并使用该值调用回调实际上非常相似!它的奇特名称是Continuation Passing Style,实际上有些编程语言有一些功能(LISP的调用/ cc,C#的异步等),可以让你以“常规风格”编写代码,但将其编译成延续传递风格在幕后。

答案 2 :(得分:0)

这些是常规参数。

在调用内部函数时传递它们,与调用任何其他函数的方式相同。

闭包是指内部函数可以从外部函数访问变量的事实(例如,res

答案 3 :(得分:0)

感谢您的所有答案,我理解了这个概念,以下是我想与其他人分享的例子:

  function Person(){};

  Person.prototype = {
    constructor: Person,
    name : "Nicholas",
    age : 29,
    job : "Software Engineer",
    friends : ["Shelby", "Court"],
    sayName : function () {
      console.log(this.name);
    },
    hello : function (callback) {
      console.log('calling back');
      age = this.age; 
      callback(age); //we can use this.age, but for learning purpose, this' better.
    }
  };
  var person1 = new Person();
  person1.hello(function(age){console.log(age + 50);})

因此,在回调中确定了年龄参数。

干杯