【问题标题】:javascript calling a inner function from outsidejavascript 从外部调用内部函数
【发布时间】:2014-10-01 16:30:57
【问题描述】:

这是关于 javascript 闭包的工作。 我在另一个函数中有一个函数,我想在外部函数之外访问它。 有没有可能因为它写在这里你可以用这个实现关闭 http://www.w3schools.com/js/js_function_closures.asp JavaScript 嵌套函数 所有函数都可以访问全局范围。

事实上,在 JavaScript 中,所有函数都可以访问它们“之上”的范围。

JavaScript 支持嵌套函数。嵌套函数可以访问它们“上方”的范围。

在这个例子中,内部函数 plus() 可以访问父函数中的计数器变量:

例子

function add() {
    var counter = 0;`enter code here`
    function plus() {counter += 1;}
    plus();    
    return counter; 
}

我正在尝试从外部访问 plus()

【问题讨论】:

  • 相关帖子here中的一些非常好的答案。

标签: javascript


【解决方案1】:

同意冷酷。

但是如果你想在外面访问plus功能,你可以试试这样:

function add(){
  var counter = {
      value: 0,
      plus: function(){
         return ++this.value;
      }
  };
  counter.plus();
  return counter; 
}

希望对你有帮助。

【讨论】:

  • counter 的 OP 值已更改,在您的 - 你只返回值,而不是更改 value
  • this 在你的情况下是指函数counter.plus 所以this.value 将是未定义的,因为没有counter.plus.value
  • 这里指的是counter,不是counter.plus。
【解决方案2】:

你不能。内部函数只能在外部函数体内使用。

【讨论】:

【解决方案3】:

我假设您的目标是将value 作为私有财产保留在add 中,并通过add.plus() 调用对其进行操作:

//define your object with a private "value" and a public modifier "plus"
var add = (function() {
  var counter = 0;
  var that = {
    plus: function() {
      return counter++; //equal to your code
    }
  }
  //your integrated first call
  that.plus();
  return that;
})();

//make a call
add.plus();

【讨论】:

    【解决方案4】:

    DEMO - 工作代码示例。

    这可能是您正在寻找的内容,尤其是与您提供的教程链接相关的内容。这是朝着正确方向迈出的一步。

    var plus;
    add();
    plus();
    plus();
    plus();
    alert(plus());
    
    function add() {
        var counter = 0;
        plus = (function(counter) {
            return function() {counter += 1;return counter;};
        })(counter);
        plus();
    }
    

    这是一个直接的闭包示例。我做了一个全局变量,但是 add() 可以返回 plus 的函数定义。我从 add() 中取出返回值并将其移至 plus(),因为当 add() 完成时,此代码计数器将始终等于 1。

    但是,直接从您提到的教程中,实现他们正在尝试的最佳方法是使用此代码,直接从他们的网页中提取。

    var add = (function () {
        var counter = 0;
        return function () {return counter += 1;}
    })();
    
    add();
    add();
    add(); // the counter is now 3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 2015-03-02
      • 2019-12-13
      • 2011-07-05
      • 1970-01-01
      • 2018-04-22
      • 2013-01-12
      相关资源
      最近更新 更多