Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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:更改条件函数内部变量的值_Javascript_Function_Local Variables - Fatal编程技术网

Javascript:更改条件函数内部变量的值

Javascript:更改条件函数内部变量的值,javascript,function,local-variables,Javascript,Function,Local Variables,我正在尝试重用一个复杂的函数,如果我能更改函数中条件中的局部变量的值,它将非常有效 简而言之: var func = complicated_function() { // lots of code if (something) { var localvar = 35; } // lots of code } 我需要localvar作为其他数字 有没有办法在不修改函数本身的任何内容的情况下,将localvar分配给其他对象 更新:答案是肯定的!见

我正在尝试重用一个复杂的函数,如果我能更改函数中条件中的局部变量的值,它将非常有效

简而言之:

var func = complicated_function() {
    // lots of code
    if (something) {
        var localvar = 35;
    }
    // lots of code
}
我需要localvar作为其他数字

有没有办法在不修改函数本身的任何内容的情况下,将localvar分配给其他对象

更新:答案是肯定的!见下面我的回答

有没有办法在不修改函数本身的任何内容的情况下,将localvar分配给其他对象

没有

有没有办法在不修改函数本身的任何内容的情况下,将localvar分配给其他对象


否。

否,但可以有条件地分配它,以便函数签名(基本上,所需的输入和输出)不会更改。添加一个参数并使其默认为当前值:

var func = complicated_function(myLocalVar) {
    // lots of code
    if (something) {
        // if myLocalVar has not been set, use 35.
        // if it has been set, use that value
        var localvar = (myLocalVar === undefined)?35:myLocalVar;
    }
    // lots of code
}

不可以,但是可以有条件地分配它,这样函数签名(基本上,所需的输入和输出)就不会改变。添加一个参数并使其默认为当前值:

var func = complicated_function(myLocalVar) {
    // lots of code
    if (something) {
        // if myLocalVar has not been set, use 35.
        // if it has been set, use that value
        var localvar = (myLocalVar === undefined)?35:myLocalVar;
    }
    // lots of code
}

如果函数使用
this.localvar

var func = function() {
    alert(this.localvar)
    if (true) {
        var localvar = 35;
    }
    // lots of code
    alert(this.localvar)
}
var obj = {localvar: 10}; 
func.call(obj); // alerts 10 twice

如果没有,则在不更改函数的情况下无法更改它。

如果函数使用
this.localvar

var func = function() {
    alert(this.localvar)
    if (true) {
        var localvar = 35;
    }
    // lots of code
    alert(this.localvar)
}
var obj = {localvar: 10}; 
func.call(obj); // alerts 10 twice

如果没有,那么在不更改函数的情况下无法更改它。

在javascript中,变量被“推”到其函数的顶部。JavaScript中的变量具有强函数>作用范围< /强>,而不是“卷曲支撑”范围,如C、C++、java和C ^。 这与您(开发人员)手动将其推到顶部的代码相同:

var func = complicated_function() {
   var localvar = 0;
   // lots of code
   if (something) {
       localvar = 35;
   }
   // lots of code
}
将变量“up”声明为一个函数有帮助吗?至少声明是孤立的

function whatever() {
  var localvar = 0;

  var func = function() {
    var something = true;

    // lots of code
    if (something) {
        localvar = 35;
    }
    // lots of code
  };

 func();
 alert(localvar);
}
whatever();
以下是JSFIDLE:

见Crockford:

JavaScript没有块作用域,因此在块中定义变量可能会使熟悉其他C族语言的程序员感到困惑。在函数顶部定义所有变量


在javascript中,变量被“推”到其函数的顶部。JavaScript中的变量具有强函数>作用范围< /强>,而不是“卷曲支撑”范围,如C、C++、java和C ^。 这与您(开发人员)手动将其推到顶部的代码相同:

var func = complicated_function() {
   var localvar = 0;
   // lots of code
   if (something) {
       localvar = 35;
   }
   // lots of code
}
将变量“up”声明为一个函数有帮助吗?至少声明是孤立的

function whatever() {
  var localvar = 0;

  var func = function() {
    var something = true;

    // lots of code
    if (something) {
        localvar = 35;
    }
    // lots of code
  };

 func();
 alert(localvar);
}
whatever();
以下是JSFIDLE:

见Crockford:

JavaScript没有块作用域,因此在块中定义变量可能会使熟悉其他C族语言的程序员感到困惑。在函数顶部定义所有变量

没有

不改变复杂的函数是不可能的,在javascript中,您可以通过使用call和apply来管理它。如果这是一个选项,您可以覆盖复杂函数中的函数或添加新函数(但它们将无法访问局部变量localvar)

这更有趣,我的真正答案仍然是否定的

如果你感到疯狂:)

没有

不改变复杂的函数是不可能的,在javascript中,您可以通过使用call和apply来管理它。如果这是一个选项,您可以覆盖复杂函数中的函数或添加新函数(但它们将无法访问局部变量localvar)

这更有趣,我的真正答案仍然是否定的

如果你感到疯狂:)


大约三周前我问了这个问题,不到半个小时就得到了五个答案,基本上都告诉我这是不可能的

但我很高兴地宣布,答案是肯定的,这是可以做到的

以下是方法:

var newfunc = func.toString().replace('35', '42');
eval('newfunc = ' + newfunc);
newfunc();

当然,它使用eval,这可能意味着它是邪恶的,或者至少是非常不可取的,但在这种情况下,它是有效的。

大约三周前我问了这个问题,在半小时内得到了五个答案,基本上都告诉我这是不可能的

但我很高兴地宣布,答案是肯定的,这是可以做到的

以下是方法:

var newfunc = func.toString().replace('35', '42');
eval('newfunc = ' + newfunc);
newfunc();

当然,它使用eval,这可能意味着它是邪恶的,或者至少是非常不可取的,但在这种特殊情况下,它是有效的。

localvar是否在“大量代码”中的其他地方使用?localvar是否在“大量代码”中的其他地方使用?您要查找的术语是“提升”。正确。谢谢你,马特。现在我将再次阅读好的部分。你要寻找的术语是“提升”。正确。谢谢你,马特。现在我将再次阅读好的部分。我猜如果答案是“否”,那么这个答案至少为我指明了正确的方向,即如何减少/消除更改函数可能导致的问题。我猜如果答案是“否,”那么这个答案至少为我指明了正确的方向,即如何减少/消除改变函数可能导致的问题。