JavaScript变量范围问题:var或不变var

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之间的区别是什么?

谢谢!

丹尼尔

Eug*_*rez 6

如果你不在rtest中使用var,它会自动成为一个全局变量.这就是为什么它可以从其他JavaScript代码访问,包括newWindow.现在,当你使用var时,它会自动在rtest范围内变量,所以现在可以使用它的是那些在同一范围内的变量.


SLa*_*aks 5

如果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("", ...).

  • 我会考虑将教授替换为使用全局变量的事实,无论他是否声明它们. (2认同)