你怎么称呼本地功能?

时间:2011-08-03 02:28:20

标签: javascript function scope

所以基本大纲

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();
}

既不起作用!

3 个答案:

答案 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)

1

var ref;
function x(){
   // some code 
   function y(){
   //some more code
  }
  ref = y;
}
x();

function z(){
  ref();
}

2:

function x() {
};

x.y = function() { alert('2');};

function z() {  x.y(); }

3:

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();
}

全局命名空间仍然与此代码之前一样