javascript从外部调用内部函数

时间:2014-08-08 08:44:24

标签: javascript

这是关于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; 
}

我正在尝试从外部进行加号()

4 个答案:

答案 0 :(得分:3)

同意Grim。

但是如果你想访问外面的加功能,你可以尝试这种方式:

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

希望它有所帮助。

答案 1 :(得分:2)

你做不到。内部函数仅在外部函数的主体内可用。

答案 2 :(得分:1)

我认为您的目标是将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();

答案 3 :(得分:1)

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