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对象的属性添加。

链接地址: http://www.djcxy.com/p/96523.html

上一篇: JavaScript variable scope question: to var, or not to var

下一篇: Should I use window.variable or var?