无论我怎么努力,我都无法改变'i'的价值......
我的代码如下:
function changeValue(){
//neither 'var i=99;' or 'i=99;' interferes with the 'i' on myFunction
}
function myFunction(){
var i;
for(i=0;i<3;i++){
alert(i);
changeValue();
alert(i);
}
}
myFunction();
我的问题:如何使用 changeValue 函数更改'i'(在 MyFunction 上)的值?
另外:我非常需要阅读一些关于此的指南,有人可以给我一个好的链接吗?
答案 0 :(得分:2)
将changeValue()
移至与i
相同的范围内:
function myFunction(){
var i;
for(i=0;i<3;i++){
alert(i);
changeValue();
alert(i);
}
function changeValue() { i = 99; }
}
或者,将i
放在与changeValue()
相同的范围内:
var i;
function changeValue() { i = 99; }
function myFunction(){
// var i; // don't define i here
for(i=0;i<3;i++){
alert(i);
changeValue();
alert(i);
}
}
或者,您可以告诉changeValue()
i
的值是什么,然后让它返回新值:
function changeValue(i) {
return i + 1;
}
然后:
i = changeValue(i);
编辑:说明范围:
var a = 0; // global scope - accessible everywhere via a
// unless overridden by a locally scoped a
// always accessible via window.a
function doSomething () {
var a = 1; // local scope - you can still access window.a
var b = 2; // local scope - accessible to child scopes, but not global scope
function innerFunction () {
var a = 3; // you no longer have access to the parent function's a variable
// you can still access window.a
var c = 4; // only accessible here (since no child scopes exist)
alert(window.a); // 0
alert(a); // 3
alert(b); // 2
alert(c); // 4
}
innerFunction();
alert(window.a); // 0
alert(a); // 1
alert(b); // 2
alert(c); // undefined - unavailable in this scope
}
doSomething();
alert(window.a); // 0
alert(a); // 0
alert(b); // undefined - unavailable in this scope
alert(c); // undefined - unavailable in this scope
答案 1 :(得分:1)
您只需返回值:
function changeValue(i) {
return i + 2;
}
for(i=0;i<3;i++){
alert(i);
i = changeValue(i);
alert(i);
}
答案 2 :(得分:0)
function myFunction(){
var i;
for(i=0;i<3;i++){
alert(i);
i = changeValue();
alert(i);
}
}
而changeValue():
changeValue(){
return new_i;
}
答案 3 :(得分:0)
当您在var
中使用myFunction
时,它将成为该范围内的本地变量。所以你不能在外面的任何地方访问它,无论你怎么努力。
在这两个地方使用window.i
代替var i
,它应该有用,
您可以简单地避免window.
并直接使用i
而不使用var
前缀,或者甚至将var i
声明放在这两个函数之外......但实际上变量变为window
对象的一部分。 (通常,JS中的所有全局变量都是window
对象的一部分)
答案 4 :(得分:0)
您只能操作范围内的变量。目前,i
的范围仅限于myFunction()
。
This是一篇很棒的文章,可帮助您开始了解JavaScript中的范围规则。
答案 5 :(得分:0)
changeValue
和myFunction
都存在于全局范围内。如果在myFunction中定义i
,它只能在myFunction
及其子函数中访问,函数在myFunction中定义。 '范围链'(我只想为它说一句话)看起来像这样:
myFunction <- window
changeValue也存在于全局范围内。它是从myFunction调用的,但不会改变它存在的范围。它的范围链是这样的:
changeValue <- window
如果你只在myFunction中使用changeValue,你可以这样做:
function myFunction() {
function changeValue() { /* stuff */ }
/* more stuff */
}
changeValue的范围链现在是这样的:
changeValue <- myFunction <- window
i
中存在myFunction
,现在它也存在于changeValue
中。