变量范围

时间:2010-10-05 14:08:29

标签: javascript scope

我的网站标题中包含两个javascript文件。两个文件包含几乎相同的变量。

如果我有这样的标题

  <head>
    <script src="http://127.0.0.1/js/file1.js" type="text/javascript"></script>
    <script src="http://127.0.0.1/js/file2.js" type="text/javascript"></script>
 </head>

是否可以从file2.js访问file1.js中定义的变量?

这就是我正在尝试的

    file1
    $(function() {
        var x = 1;
    });

file2
    $(function() {
      console.log(x); //This dosen`t work. Can`t access var
    });

5 个答案:

答案 0 :(得分:2)

你做这件事的方式是不可能的。变量必须存在于全局范围内才能跨文件使用。在您的示例中,x在匿名函数的范围内定义。如果您将其更改为

// file1 
var x;
$(function() { 
    x = 1; 
}); 

然后您可以从第二个文件中访问x

答案 1 :(得分:0)

是的,这应该有用。只要变量是一个脚本中的全局变量,它就会出现在另一个脚本中。

答案 2 :(得分:0)

是的,DOM中有一个全局对象,两个文件都将变量写入。基本上如果file1说:

foo = bar;

然后在file2中,您可以访问foo

如果您明确要声明全局变量,则可以使用window对象,它是网页中的全局对象:

window.foo = 'bar';

有关全局对象的更多信息:http://www.quirksmode.org/js/this.html

答案 3 :(得分:0)

如果您考虑将javascript文件替换为脚本的实际内容,那么当然。如果变量是全局变量,则file2将可以访问它。

答案 4 :(得分:0)

唯一可以做到这一点的方法是为每个文件提供自己的“命名空间”

var File1 = {
    X: 2
};


var File2 = {
    X: 3
};

以防这是不明确的。我的意思是每个文件的内容必须包装在一个命名对象中,该对象将充当命名空间。