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