Как вы вызываете локальную функцию? - PullRequest
1 голос
/ 03 августа 2011

Так вот основные принципы

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 ]

4 голосов
/ 03 августа 2011

Много кода, мало объяснений.

function x(){
   // some code 
   function y(){
   //some more code
  }
}

Выше объявляется y внутри x , поэтому он создается как свойство Переменный объект x каждый раз, когда вызывается x . y доступен только изнутри x , если код внутри x не делает его доступным из других источников.

function z(){
  // how do i call function y?
}

Для вызова y изнутри z , оно должно быть доступно в цепочке областей действия z .Это можно сделать, передав его в вызове функции (сделав его свойством объекта переменной z ) или присвоив ему свойство некоторого объекта в цепочке областей действия z .

Если функция должна быть доступна обеим функциям, имеет смысл объявить ее, где к ней могут обращаться как x и z , так и инициализировать z таким образом, что y доступно.например,

var z;
var x = (function() {
  function y(){}

  z = function() {
        // something that calls y;
      };

  return function() {
    // x function body
  }
}());

В приведенном выше примере x и z имеют доступ к одной и той же функции y , и она не создается каждый раз х называется.Обратите внимание, что z будет неопределенным до тех пор, пока не будет выполнен код, присваивающий x .

Обратите также внимание, что y равно только доступно для x и z , к ней не может получить доступ никакая другая функция (поэтому y можно назвать закрытой функциейи x и z можно назвать привилегированными функциями).

3 голосов
/ 03 августа 2011

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 голосов
/ 03 августа 2011
function x(){
   // some code 
  this.y=function(){
   //some more code
  }
}

function z(){
 var fun_x=new x();
fun_x.y();
}

глобальное пространство имен все еще остается прежним

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...