2

あなたはこれを何度も経験したと思いますが、スレッドウィッチが私のニーズに本当に合っているかどうかはわかりません。

var innerをoutertwoで機能させるにはどうすればよいですか?

function outerOne(){

/* do something*/

    var inner = function(){
            return true 
    }; inner();

};
outerOne()


function outerTwo(){
    if (inner==true)
/* do something*/
};
outerTwo();

注意してください、私はそれをグローバルにするために外部でvarxを宣言することが可能であることを知っています。しかし、私が達成したいのは、関数内からスコープから変数を取得することです

4

4 に答える 4

2

やってみました:

var x;
function outerOne(){

    /* do something*/

    var inner = function(){
        x = 5
        console.log(x + "  Works in inner()");       
    }; 
    inner();

    console.log(x + "  Works in outerOne()");
};
outerOne();

function outerTwo(){
    console.log(x + "  Works in outerTwo()");
};
outerTwo();

関数は、親スコープで宣言された変数とのみスコープを共有します。

編集

完全を期すために、関数から値を返すことを妨げるものは何もないことを付け加えておきます。

function outerOne(){

    /* do something*/

    var inner = function(){
        var x = 5
        console.log(x + "  Works in inner()");
        return x;       
    }; 
    var x1 = inner();

    console.log(x1 + "  Works in outerOne()");
    return x1;
};
var x2 = outerOne();

function outerTwo(){
    console.log(x2 + "  Works in outerTwo()");
};
outerTwo();
于 2013-03-21T05:49:04.577 に答える
1

コードをIIFEでラップします。そして、内部を未定義の変数として上部に設定します。

(function(){
var inner;

  function outerOne(){
  /* do something*/

      inner = function(){
         return true 
      }; inner();
  };
  outerOne()

  function outerTwo(){
      if (inner==true){
        //inner has been set to true, do something
      }
      else{
        //Inner has not been set to true, do something else
      }
  };
  outerTwo();

})();
于 2013-03-21T05:58:23.390 に答える
1

たぶん、コードを次のように再構築できます

var obj = 
    {
        outerOne : function(){return true;//or whatever logic you need here
                          },

        outerTwo : function(){  
           if(this.outerOne() === true){
               //do something
           }
        }
    }

    obj.outerTwo();
于 2013-03-21T05:47:45.063 に答える
0

変数 'x' をグローバル外部関数にします。

var x = 0; 
function outerOne(){   
 //code block

var inner = function(){
        x = 5
       console.log(x + "  Works in inner()");       
}; inner();
console.log(x + "  Works in outerOne()");
};
outerOne()


function outerTwo(){
console.log(x + "  Works in outerTwo()");
};
outerTwo();
于 2013-03-21T05:50:26.300 に答える