如果我在HTML页面中包含JavaScript文件,那么我的JavaScript文件中声明的变量是否也在我的HTML页面中的<script />
标记中具有范围?例如,在我包含的JS文件中,我声明了一个变量:
var myVar = "test";
然后在我的HTML页面中,它会产生什么(如果它在我的include脚本标记之后)?
alert(myVar);
答案 0 :(得分:15)
如果您将任何函数之外的变量声明为
var myVar = 'test';
或任何位置
myVar = 'test';
或
window.myVar = 'test';
它应该被添加到全局对象(窗口)并且可以在任何地方使用
alert(myVar);
或
alert(window.myVar);
或
alert(window['myVar']);
答案 1 :(得分:3)
它将生成一个包含“test”的警报。
在JavaScript的顶层声明的所有变量共享相同的范围。如果要在一个文件中使用不会与另一个文件冲突的变量,那么可以使用匿名函数来引入新的范围:
var myVar = "something else";
(function () {var myVar = "test"; alert(myVar)})();
alert(myVar);
编辑:正如BYK指出的那样,您可以通过分配对象文字来将其扩展为类似于完整的命名空间的内容:
var MyNamespace = (function () {
var myVar = "something";
return { alert: function() { alert(myVar) },
setVar: function(value) { myVar = value } }
})();
答案 2 :(得分:1)
在代码中声明变量或函数时,您创建的属性为window
。请考虑以下示例:
var a = 'Cow';
alert(window.a); // Cow
alert(this.a); // Cow
alert(a); // Cow
如果在函数内声明变量,除非将其添加到window
对象,否则将无法从其外部访问变量:
function lalala() {
alert(a); // still Cow
a = 'Pig'; // We're tired of cows by now. Let's make it a pig.
var b = 'Sheep';
}
lalala();
alert(a); // Pig
alert(b); // undefined, since b is declared in the lalala scope
因此,您的示例会提醒test
。