JavaScript变量范围问题:var,或不var
提前谢谢了。 我正在学习一本教科书,他们使用一个函数调用另一个函数打开一个窗口:
function rtest(){
content='dans window';
oneWindow=open("","Window 1","width=450,height=290");
newWindow(oneWindow);
}
function newWindow(x){
x.document.close();
x.document.open();
x.document.write(content);
x.document.close();
x.moveTo(20,20);
x.focus();
}
所以一切工作正常,但我的问题是这样的:newWindow()函数如何访问rtest()函数中的“内容”变量的内容? 为什么,如果我用“var”作为前缀“content”变量,如下所示:
function rtest(){
**var content='dans window';**
oneWindow=open("","OneWindow","width=450,height=290");
newWindow(oneWindow);
}
...抛出错误(并且新窗口的内容留空)?
任何人都可以向我解释使用var和不使用var之间的区别是什么?
谢谢!
丹尼尔
如果你在原始函数中声明了使用var
的变量,它将变成局部变量,并且在函数外面不可见。
如果你根本不声明变量,它将是全局的。 但是,最佳做法是声明全局变量。 如果你的教科书没有这样做,考虑替换它。 如果你的教授不这样做,考虑替换(或改革)他。 :-)如果你无法说服他,你可以(但不一定应该)提到我是这里的200名用户之一。
例如:
var content;
function rtest(){
content='dans window';
oneWindow=open("","Window 1","width=450,height=290");
newWindow(oneWindow);
}
此外,打开空白窗口的最佳方式是open("about:blank", ...)
,而不是open("", ...)
。
如果你不在rtest中使用var,它会自动成为一个全局变量。 这就是为什么它可以从其他JavaScript代码(包括newWindow)访问。 现在,当你使用var时,它会自动在rtest范围内使用一个变量,所以现在可以使用它的是那些在相同范围内的变量。
这是关于函数范围的,如果你用var
声明你的变量,它将只在你所做的函数的范围内可用。
如果您不使用var
语句,并且对未声明的标识符(未声明的赋值)进行赋值,则该变量将作为Global对象的属性添加。
上一篇: JavaScript variable scope question: to var, or not to var