有没有办法在超出范围时更改变量?我知道一般情况下,你不能,但我想知道是否有任何技巧或覆盖。例如,是否有任何的方式来进行以下工作:更改变量超出范围?
function blah(){
var a = 1
}
a = 2;
alert(blah());
EDIT(澄清):
的假设的情况将被修改以setInterval函数中使用的变量,它也是出于范围和一个不可编辑的以前的JavaScript文件。这是一个非常古怪的场景,但这是我打算询问的。
有没有办法在超出范围时更改变量?我知道一般情况下,你不能,但我想知道是否有任何技巧或覆盖。例如,是否有任何的方式来进行以下工作:更改变量超出范围?
function blah(){
var a = 1
}
a = 2;
alert(blah());
EDIT(澄清):
的假设的情况将被修改以setInterval函数中使用的变量,它也是出于范围和一个不可编辑的以前的JavaScript文件。这是一个非常古怪的场景,但这是我打算询问的。
没有窍门或覆盖。您必须计划让这两个地方都能够在相同范围内看到变量。
我能想到关于范围的唯一技巧是在浏览器中使用window
来获取全局对象。这可以帮助你得到一个“隐藏的”变量 - 一个在范围内,但其名称已被局部变量(或范围链中更接近的其他变量)超越的变量。
闭包和类可以给你提供一些其他范围的技巧,但没有一个允许你完全覆盖范围规则。
我不明白为什么你需要这样做,如果你需要一个可以从外部访问的变量,只需在外部声明它。
现在,如果你问这是因为你想学习一些东西,对你有好处。
var a = 0;
function blah() {
a = 1;
return a;
}
a = 2;
alert(blah());
点因为是的,我用一个古怪的场景瞎掰,你似乎已经意识到了) – Matrym 2010-05-04 03:02:20
函数可以访问自己的范围之内声明的变量,如果它们的功能本身之前宣称:
var a = 0;
function blah() {
a = 1;
}
a = 2;
alert(blah());
请注意,您的var a
在函数内部使用声明的局部变量命名为;在这里,我们省略了关键字,否则它会隐藏a
在外部范围中声明!
糟糕,我错过了'return'关键字。 – 2010-05-04 02:54:17
它们不需要在函数定义之前声明。 – 2010-05-04 02:57:53
不,永远不会工作,但你可以使用一个全球性的:
var a;
function blah(){
a = 1
}
a = 2;
alert(blah());
或使用闭包:
function bleh() {
var a;
function blah(){
a = 1
}
a = 2;
alert(blah());
}
,或者你可以用一回各地传递(其表现不同,但可能是你想要做的):
function blah(a){
a = 1
return a;
}
a = 2;
alert(blah(a));
你忘了返回 – Thielicious 2017-03-29 08:37:47
您可以从函数返回值,当然:
function blah() {
var a=1;
return a;
}
但我认为这不是你脑子里想什么相当。由于函数调用通过局部变量创建闭包,一旦创建闭包,通常不可能修改这些值。
对象有些不同,因为它们是参考值。
function blah1(v) {
setInterval(function() {
console.log("blah1 "+v);
}, 500);
}
function blah2(v) {
setInterval(function() {
console.log("blah2 "+v.a);
}, 500);
}
var a = 1;
var b = {a: 1};
blah1(a);
blah2(b);
setInterval(function() {
a++;
}, 2000);
setInterval(function() {
b.a++;
}, 2000);
如果您在使用控制台对象的环境中运行这个,你会看到报道blah2变化2秒后,但blah1只是继续使用相同的值v的值。
感谢您的想法。如果其他人知道任何技巧,我会让问题坐下来一会儿。否则,这是正确的答案。谢谢。 – Matrym 2010-05-04 03:10:00