将变量从out函数传递给内部函数

时间:2013-12-12 11:00:48

标签: javascript

在对象文字中,在函数定义中,我调用另一个函数并将其传递给函数定义。

...

var myObjLiteral = {
    ...
    , check_on: function(param1, param2) {
           ref.otherFunction(param1, function(param2){checkJson(param2)}); 
    }
}

otherFunction将按原样接收param1,但不会按原样接收param2。

为什么呢?

因为传递给其他函数的第二个参数创建了它自己的闭包,而param2实际上是一个新的引用,它在check_on的定义中覆盖了param2的外部引用。

我认为这是正确的。但更重要的是,如何将param2的值传递给我作为第二个参数传递给otherFunction的函数定义?

由于

3 个答案:

答案 0 :(得分:3)

只需删除param2 param,(不需要anotherParam,只是为了说明问题)

    otherFunction(param1, function(anotherParam) {

        checkJson(param2);
    });

因此该函数将成为param2的闭包。

让我们假设otherFunction是这样的:

 otherFunction = function(p1, callback){}

然后回调(123456)将使另一个Param = 123456;

答案 1 :(得分:0)

这是因为当您在第二个函数中声明param2时,它会在第二个函数内创建一个具有该名称的新变量。因此关闭被打破了。删除param2的声明或重命名它以使闭包工作。

tutorial帮助我更好地理解了闭包是如何工作的。

答案 2 :(得分:0)

以下是我如何帮助我解释安德鲁对自己的回答。您可能会发现这很有用:

var myObjLiteral = {

  check_on: function (param1, param2) {
    var _this = this;
    this.otherFunction(param1, function () {
        _this.checkJson(param2);
    });
  },

  otherFunction:  function(param1, callback) {
    console.log('otherFunction', param1); // otherFunction 1
    callback();
  },

  checkJson: function (param2) {
    console.log('checkJson', param2); // checkJson 2
  }

}

myObjLiteral.check_on(1, 2);