JavaScript 变量范围问题 : to var, or not to var

标签 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();
}

所以一切正常,但我的问题是:newWindow() 函数如何能够访问 rtest() 函数中“contents”变量的内容?为什么,如果我在“content”变量前加上“var”,就像这样:

function rtest(){
  **var content='dans window';**
  oneWindow=open("","OneWindow","width=450,height=290");
  newWindow(oneWindow);
}

...是否抛出错误(并且新窗口的内容留空)?

谁能给我解释一下使用 var 和不使用 var 的区别是什么?

谢谢!

丹尼尔

最佳答案

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

关于JavaScript 变量范围问题 : to var, or not to var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1956296/

相关文章:

javascript - AngularJS 为什么在一个 promise 上使用 $q.all() ?

Python——从该类的实例中调用与该类相同的文件中的函数?

c++ - 为什么可以访问在 for 循环中创建的 vector ,这些 vector 被保存到 vector 的 vector 中?

javascript - jQuery.text() - 如何在不影响任何子元素的情况下更改标签的文本

javascript - 单击后如何在 javascript/jquery 中更新变量?

asp.net - 通过使用 Javascript 将邮政编码传递给 maps.google.com 来获取纬度经度

javascript - .otherwise 或/** 在新的 Angular2 Router 中通过通配符路由非路由

javascript - 调用 Coldfusion 组件函数的 jQuery post 方法不起作用

javascript - 具有属于给定插件实例的 "local"变量的 jQuery 插件

c# - 为什么 ReSharper 想要对所有内容使用 'var'?