所以基本大纲
function x(){
// some code
function y(){
//some more code
}
}
function z(){
// how do i call function y?
}
我试过
function z(){
window[x][y];
}
and
function z(){
x();y();
}
既不起作用!
答案 0 :(得分:4)
很多代码,没有太多解释。
function x(){
// some code
function y(){
//some more code
}
}
以上在 x 中声明 y ,因此每次 x时都会将其创建为 x 的变量对象的属性被调用。 y 只能从 x 内部访问,除非 x 中的代码可以从其他地方获取。
function z(){
// how do i call function y?
}
要从 z 内部调用 y ,它必须在 z 的范围链中可用。这可以通过在函数调用中传递它(使其成为 z 的变量对象的属性)或使其成为 z 范围内某个对象的属性来完成链
如果两个函数都可以使用该函数,那么将它声明为 x 和 z 可以访问的函数,或者初始化是有意义的。 z 以 y 可用的方式。 e.g。
var z;
var x = (function() {
function y(){}
z = function() {
// something that calls y;
};
return function() {
// x function body
}
}());
在上面, x 和 z 都可以访问相同的 y 函数,并且每次 x都不会创建它被调用。请注意,在执行分配给 x 的代码之前, z 将是未定义的。
另请注意 y 仅 可用于 x 和 z ,它无法通过任何其他函数(因此 y 可能被称为私有函数而 x 和 z 可能被称为特权功能)。
答案 1 :(得分:3)
var ref;
function x(){
// some code
function y(){
//some more code
}
ref = y;
}
x();
function z(){
ref();
}
function x() {
};
x.y = function() { alert('2');};
function z() { x.y(); }
function y(){ alert('god'); };
function x() {
function a() {
y();
}
}
function z() {
y();
}
z();
答案 2 :(得分:2)
function x(){
// some code
this.y=function(){
//some more code
}
}
function z(){
var fun_x=new x();
fun_x.y();
}
全局命名空间仍然与此代码之前一样