Dan*_*abo 3 javascript scope 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();
}
Run Code Online (Sandbox Code Playgroud)
所以一切正常,但我的问题是:newWindow()函数如何能够访问rtest()函数中"contents"变量的内容?为什么,如果我在"var"前面添加"内容"变量,就像这样:
function rtest(){
**var content='dans window';**
oneWindow=open("","OneWindow","width=450,height=290");
newWindow(oneWindow);
}
Run Code Online (Sandbox Code Playgroud)
...是否会抛出错误(新窗口的内容留空)?
任何人都可以向我解释使用var和不使用var之间的区别是什么?
谢谢!
丹尼尔
如果你不在rtest中使用var,它会自动成为一个全局变量.这就是为什么它可以从其他JavaScript代码访问,包括newWindow.现在,当你使用var时,它会自动在rtest范围内变量,所以现在可以使用它的是那些在同一范围内的变量.
如果var在原始函数内使用声明变量,它将成为局部变量,并且在函数外部不可见.
如果你根本没有声明变量,它将是全局变量.但是,最佳实践是声明全局变量.如果您的教科书没有这样做,请考虑更换它.如果你的教授不这样做,考虑更换(或改造)他.:-)如果你难以说服他,你可以(但不一定应该)提到我是这里的前200名用户之一.
例如:
var content;
function rtest(){
content='dans window';
oneWindow=open("","Window 1","width=450,height=290");
newWindow(oneWindow);
}
Run Code Online (Sandbox Code Playgroud)
此外,打开空白窗口的最佳方法是打电话open("about:blank", ...),而不是open("", ...).