JavaScript variable scope question: to var, or not to var
提前谢谢了。 我正在制作一本教科书,他们正在使用一个函数调用另一个打开一个窗口的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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()函数中"contents"变量的内容? 为什么,如果我在"var"前面添加"内容"变量,就像这样:
1 2 3 4 5 | function rtest(){ **var content='dans window';** oneWindow=open("","OneWindow","width=450,height=290"); newWindow(oneWindow); } |
...是否会抛出错误(新窗口的内容留空)?
任何人都可以向我解释使用var和不使用var之间的区别是什么?
谢谢!
丹尼尔
如果你不在rtest中使用var,它会自动成为一个全局变量。这就是为什么它可以从其他JavaScript代码访问,包括newWindow。现在,当你使用var时,它会自动在rtest范围内变量,所以现在可以使用它的是那些在同一范围内的变量。
如果在原始函数内使用
如果你根本没有声明变量,它将是全局变量。但是,最佳实践是声明全局变量。如果您的教科书没有这样做,请考虑更换它。如果你的教授不这样做,考虑更换(或改造)他。 :-)如果你难以说服他,你可以(但不一定应该)提到我是这里的前200名用户之一。
例如:
1 2 3 4 5 6 7 | var content; function rtest(){ content='dans window'; oneWindow=open("","Window 1","width=450,height=290"); newWindow(oneWindow); } |
此外,打开空白窗口的最佳方法是调用
如果你不使用
虽然全局变量起初很方便,但使用它们通常是个坏主意。问题是你的所有代码都会共享一个全局变量;在将来,如果您因任何原因需要拥有该变量的两个或更多不同版本,您将无法将这两个用途分开。全局变量也可以从程序中的任何位置访问或更改,因此很难弄清楚可能正在修改的内容或取决于哪一个,而局部变量只能在代码中有限的,定义良好的部分中访问,这可以容易检查。
它是关于函数范围的,如果用
如果不使用
使用var,您可以在函数中声明一个局部变量,因此在此函数外部不可见。如果没有var,您实际上正在处理窗口对象并设置或覆盖它的字段。客户端Javascript中的全局范围始终是窗口对象。所以你也可以写window.content ='dans window';更清楚你在那里做了什么,但否则它会是相同的。顺便说一句:窗口变量本身只是窗口对象的一个??字段,它递归地返回窗口。