Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将内部var的范围扩展到另一个函数中_Javascript_Scope - Fatal编程技术网

Javascript 将内部var的范围扩展到另一个函数中

Javascript 将内部var的范围扩展到另一个函数中,javascript,scope,Javascript,Scope,我相信你已经经历过很多次了,但我想不出一个真正适合我需要的线 如何让var inner在outertwo中工作 function outerOne(){ /* do something*/ var inner = function(){ return true }; inner(); }; outerOne() function outerTwo(){ if (inner==true) /* do something*/ }; oute

我相信你已经经历过很多次了,但我想不出一个真正适合我需要的线

如何让var inner在outertwo中工作

function outerOne(){

/* do something*/

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

};
outerOne()


function outerTwo(){
    if (inner==true)
/* do something*/
};
outerTwo();
请注意,我知道可以在外部声明var x,使其成为全局变量。
但我想实现的是从函数内部将var从范围中移除

也许您可以将代码重组为类似这样的内容

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

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

    obj.outerTwo();

也许你可以把你的代码重组成这样

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

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

    obj.outerTwo();
您是否尝试过:

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();
您是否尝试过:

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

使变量“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();

使变量“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();
将代码包装在一个文件中。并在顶部将inner设置为未定义的变量

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

})();
将代码包装在一个文件中。并在顶部将inner设置为未定义的变量

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

})();


问题是什么?为什么要使用其他作用域变量?我想让outerTwo()中的var x起作用,例如,如果我需要在outerTwo中执行if/else,它依赖于x或类似的东西,但如何扩展inner的作用域?我想你可能会混淆变量声明和变量赋值。变量可以在指定的范围之外声明。问题是什么?为什么要使用其他作用域变量?我想让outerTwo()中的var x起作用,例如,如果我需要在outerTwo中执行if/else,它依赖于x或类似的东西,但如何扩展inner的作用域?我想你可能会混淆变量声明和变量赋值。变量可以在分配给它们的作用域之外声明。好的,在这种情况下它可以工作,但在其他一些情况下它不能工作。例如,如果由于事件elem.onclick=function(){var internal=function(){return true}}function outer(){if(内部==true)/做点什么/}如果变量是全局变量,则可以从任何函数(包括click events)访问它。我不确定是否完全理解这个问题,我认为我对它的描述有点糟糕,因此请参阅我对函数的编辑。在这种情况下,它会起作用,但在其他一些情况下它不会起作用,例如,如果由于事件元素导致内部结果中的变量m、 onclick=function(){var internal=function(){return true}}}function outer(){if(internal==true)/do something/}如果该变量是全局变量,则可以从任何函数(包括单击事件)访问该变量。我不确定是否完全理解该问题。我认为我对该变量的描述有点糟糕,因此请查看我对该函数的编辑。但是,如果x的结果是由于发生在outerfunction上的某个事件(如onclick)导致的,会怎么样?但是如果x的结果是由于发生在outerfunction上的某个事件导致的呢outerfunction,比如onclick?:)我知道我可以用这种方式使它成为全局变量,但是如果我不能在外部声明一个变量,那该怎么办?因为它是在函数期间产生的(请参考我上面的注释)变量是由您声明的,它们不是由函数产生的。函数返回可以分配给变量的值,但您可以控制变量的声明时间。我同意,并且我对它进行了描述。我认为这会更容易。如果您想说的是变量声明(而不仅仅是赋值),请参阅上面的编辑绝对必须发生在内部函数中,然后我很抱歉地通知您,您将无法在该函数之外的任何其他地方使用该变量。太好了,这就是我一直在寻找的答案,即使我希望有一种方法可以使其工作,谢谢:)我知道我可以通过这种方式使其全局化,但是,如果我不能在外部声明一个var,因为它是在函数期间产生的(请参考我上面的注释),变量是由您声明的,它们不是函数产生的。函数返回可以分配给变量的值,但您可以控制变量的声明时间。我同意,并且我对它进行了描述。我认为这会更容易。如果您想说的是变量声明(而不仅仅是赋值),请参阅上面的编辑绝对必须发生在内部函数中,然后我很抱歉地通知您,您将无法在该函数之外的任何其他地方使用该变量。太好了,这就是我一直在寻找的答案,即使我希望有办法使其工作,谢谢