Javascript-在全局范围内调用本地函数/属性
假设我有以下JavaScriptJavascript-在全局范围内调用本地函数/属性,javascript,Javascript,假设我有以下JavaScript function myGlobalFunction(){ function firstInnerFunction(){ return "rainbows"; } function secondInnerFunction(){ function innerInnerFunction(){ return "clouds"; } return
function myGlobalFunction(){
function firstInnerFunction(){
return "rainbows";
}
function secondInnerFunction(){
function innerInnerFunction(){
return "clouds";
}
return innerInnerFunction();
}
return firstInnerFunction(); //valid call
}
在全局作用域中是否有我可以调用firstInnerFunction()的方法?如果是这样的话(更好的是),我是否可以向下两层从全局范围调用innerFunction()?如果您希望调用globalFunction来定义firstInnerFunction,可以按如下操作
function globalFunction() {
firstInnerFunction = function() { return "rainbows" ; } ;
}
对于innerInner函数,可以执行以下操作
function globalFunction() {
firstInnerFunction = function() { return "rainbows" ; } ;
secondInnerFunction = function() {
innerInnerFunction = function() { return "clouds" ; } ; }
}
现在你可以这样做了
globalFunction() ; // defines firstInnerFunction and secondInnerFunction in the global scope
firstInnerFunction() ; // returns "rainbows"
secondInnerFunction() ; // defines innerInnerFunction
innerInnerFunction() ; // returns "clouds"
你做那样的事想要达到什么目的?我建议如下:
var myGlobalFunction = {
var innerInnerFunction() { return "clouds"; }
get firstInnerFunction() { return "rainbows"; }
get secondInnerFunction() { return innerInnerFunction(); }
};
然后,您可以使用如下方法调用firstInnerFunction():
myGlobalFunction.firstInnerFunction;
var secondInnerCopy;
function myGlobalFunction(){
function firstInnerFunction(){
return "rainbows";
}
function secondInnerFunction(){
function innerInnerFunction(){
return "clouds";
}
return innerInnerFunction();
}
secondInnerCopy = secondInnerFunction;
return firstInnerFunction(); //valid call
}
myGlobalFunction();
secondInnerCopy(); //valid (only after myGlobalFunction called though)
至于从全局作用域调用InnerFunction(),myGlobalFunction.secondInnerFunction()的作用与直接调用InnerFunction()的作用相同。简而言之,不。JavaScript是函数作用域,因此内部的所有内容都从外部隐藏。因此,为了访问内部函数,您需要以某种方式公开它们 绝对最简单(但丑陋)的选择是这样做:
myGlobalFunction.firstInnerFunction;
var secondInnerCopy;
function myGlobalFunction(){
function firstInnerFunction(){
return "rainbows";
}
function secondInnerFunction(){
function innerInnerFunction(){
return "clouds";
}
return innerInnerFunction();
}
secondInnerCopy = secondInnerFunction;
return firstInnerFunction(); //valid call
}
myGlobalFunction();
secondInnerCopy(); //valid (only after myGlobalFunction called though)
更好的选择是重构为具有以下函数的对象图:
var global = {
myGlobalFunction: function(){
return this.inner.firstInnerFunction(); //valid call
},
inner: {
firstInnerFunction: function() {
return "rainbows";
},
secondInnerFunction: function(){
return this.inner.innerInnerFunction();
},
inner: {
innerInnerFunction: function(){
return "clouds";
}
}
}
};
global.myGlobalFunction();
global.inner.inner.innerInnerFunction();
//etc...
我不认为这是可能的,但我可能是错的。您可以这样做,通过顶级函数访问嵌套函数
function A(x) {
function B(y) {
function C(z) {
alert(x + y + z);
}
C(3);
}
B(2);
}
A(1); // alerts 6 (1 + 2 + 3)
另一个例子
function addSquares(a,b) {
function square(x) {
return x * x;
}
return square(a) + square(b);
}
a = addSquares(2,3); // returns 13
b = addSquares(3,4); // returns 25
c = addSquares(4,5); // returns 41
检查这个链接,它有一些关于Javascript中函数和嵌套函数的好信息 尽管我喜欢Alconja的做法,但我相信这样的做法也会奏效
var myGlobalFunction = {
firstInnerFunction: function(){
return "rainbows";
},
secondInnerFunction : function(){
var innerInnerFunction = function(){
return "clouds";
}
var inninnerFuncTwo = function(){
return 'more stuff';
}
return {
inn : innerInnerFunction,
inn2: inninnerFuncTwo
}
}
}
myGlobalFunction.secondInnerFunction().inn();
myGlobalFunction.secondInnerFunction().inn2();