Javascript 局部变量到外部函数
我试图访问外部函数中函数的局部变量作为自由变量 这就是我想要实现的目标:Javascript 局部变量到外部函数,javascript,eval,scope,dynamic-scope,Javascript,Eval,Scope,Dynamic Scope,我试图访问外部函数中函数的局部变量作为自由变量 这就是我想要实现的目标: function try_evaluate() { var i = 0; show_r("i <= 10"); } function show_r(expression) { if (eval(expression)) { i++; show_r(expression); } else alert(eval(expression)); } 我得到一个
function try_evaluate() {
var i = 0;
show_r("i <= 10");
}
function show_r(expression) {
if (eval(expression)) {
i++;
show_r(expression);
} else alert(eval(expression));
}
我得到一个错误,因为变量I未在show\r的范围内定义。将i设为全局变量是可行的,但我需要将i设为局部变量。对于var i,该变量只能在定义它的函数范围内访问。同一作用域中的匿名函数确实可以访问它,但对外部定义的函数的调用没有访问权限。相反,您需要传递变量或在两种上下文都可用的范围内定义它,例如全局范围,但我不建议您使用它
我也会对你具体想做的事非常谨慎。如果必须使用eval来执行某些操作,那么这可能是错误的。对于var i,该变量只能在定义它的函数范围内访问。同一作用域中的匿名函数确实可以访问它,但对外部定义的函数的调用没有访问权限。相反,您需要传递变量或在两种上下文都可用的范围内定义它,例如全局范围,但我不建议您使用它
function try_evaluate(){
var i = 0;
show_r(i);
}
function show_r(x){
//console.log(eval.expression);
if (x<=10){
x++;
console.log(x);
show_r(x);
} else {
console.log(false);
}
}`
我也会对你具体想做的事非常谨慎。如果你必须使用eval来做一些事情,那可能是错误的
function try_evaluate(){
var i = 0;
show_r(i);
}
function show_r(x){
//console.log(eval.expression);
if (x<=10){
x++;
console.log(x);
show_r(x);
} else {
console.log(false);
}
}`
你为什么要做评估?我认为您可以用上面的代码实现您想要做的事情
你为什么要做评估?我认为您可以使用上述代码实现您的目标。这将更好地工作:
function try_evaluate(){
var i = 0;
show_r('$ <= 10', i);
show_r('false', i);
}
function show_r(expression, i){
if (eval(expression.replace('$', i))){
i += 1
show_r(expression, i);
} else {
alert(eval(expression.replace('$', i)));
}
}
这将更好地发挥作用:
function try_evaluate(){
var i = 0;
show_r('$ <= 10', i);
show_r('false', i);
}
function show_r(expression, i){
if (eval(expression.replace('$', i))){
i += 1
show_r(expression, i);
} else {
alert(eval(expression.replace('$', i)));
}
}
这似乎是JavaScript中的动态作用域非常有用的事情。请参阅此StackOverflow线程: 这就是我要做的:
function try_evaluate() {
var i = 0;
var show_r_dynamic = eval("(" + show_r + ")");
show_r_dynamic("i <= 10");
}
您可以在这里看到演示:这似乎是JavaScript中的动态作用域非常有用的东西。请参阅此StackOverflow线程: 这就是我要做的:
function try_evaluate() {
var i = 0;
var show_r_dynamic = eval("(" + show_r + ")");
show_r_dynamic("i <= 10");
}
您可以在这里看到演示:您应该添加字符串,但如下所示。将其作为参数传递,并将其集成到表达式中
function try_evaluate() {
var i = 0;
show_r(i," <= 10");
}
function show_r(i,expression) {
if (eval(i+expression)) {
i++;
show_r(i+expression);
} else alert(eval(i+expression));
}
或者您可以尝试在表达式中替换它,以允许使用多个i进行&&expresions
function try_evaluate() {
var i = 0;
show_r(i,"i <= 10");
}
function show_r(i,expression) {
if (eval(expression.replace("i",i)) {
i++;
show_r(expression.replace("i",i));
} else alert(eval(expression.replace("i",i)));
}
你应该像这样添加字符串。将其作为参数传递,并将其集成到表达式中
function try_evaluate() {
var i = 0;
show_r(i," <= 10");
}
function show_r(i,expression) {
if (eval(i+expression)) {
i++;
show_r(i+expression);
} else alert(eval(i+expression));
}
或者您可以尝试在表达式中替换它,以允许使用多个i进行&&expresions
function try_evaluate() {
var i = 0;
show_r(i,"i <= 10");
}
function show_r(i,expression) {
if (eval(expression.replace("i",i)) {
i++;
show_r(expression.replace("i",i));
} else alert(eval(expression.replace("i",i)));
}
我试着模仿while语句,然后消费者可以做一些类似的事情:show_r'I>9'或show_r'I!=3'之类的,这是因为我需要评估。谢谢你的回答!因此,在真正的函数意义上,你可以编写一个函数,它包含两个参数,x,y和操作符,并在那里进行计算。我尝试模拟一个while语句,然后,消费者可以执行如下操作:show_r'I>9'或show_r'I!=3'之类的,这是因为我需要评估。谢谢你的回答!所以在真正的函数意义上,你可以编写一个函数,它包含两个参数,x,y和操作符,然后在那里进行计算。嗨,这对我的情况不起作用,因为要计算的表达式可能会改变,我说,我试着模拟while语句,然后消费者可以做一些事情:如果你想让计算是动态的,那么显示a,使用上面显示的伪字符,然后在show_r函数中替换它。通过这种方式,你也可以传递'true'或'false'。嗨,这对我的情况不起作用,因为要评估的表达式可能会改变,我是如何说的,我尝试模拟while语句,然后消费者可以做一些事情:如果你希望评估是动态的,那么显示a,使用上面显示的伪字符,然后在show_r函数中替换它。通过这种方式,您也可以传入'true'或'false'。您好,我尝试模拟while语句,然后表达式可以更改,因为我需要eval来计算它们。谢谢你的回答!您好,我尝试模拟while语句,然后表达式可以更改,因为我需要eval来计算它们。谢谢你的回答!