这是关于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;
}
我正在尝试从外部进行加号()
答案 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