2010-07-14 72 views
99

是否可以在名为first.js的文件中使用名为second.js的另一个文件中的变量?我可以从另一个文件访问变量吗?

first.js包含一个名为colorcodes的变量。

+0

你为什么不合并它们? – Roki 2010-07-14 08:12:13

+0

@Roki:例如,您可以从其他网站加载数据,而处理它们的脚本位于您的网站上:<脚本src =“second.js”>' – Piskvor 2010-07-14 08:23:20

+0

datasource网站没有回调? 我的意思: 下载second.js 包含: ... 功能secondscriptFn(O){// 做一些事情/ w的数据; } ... 下载http://datasource.example.net/first.js?callback=secondscriptFn 然后首先包含: secondscriptFn({back:“#fff”,front:“#888”,side: “#369”}); 由于您可以控制first.js作用域,所以它比全局作用域版本更具可控性和可靠性...... – Roki 2010-07-14 08:43:46

回答

109

正如Fermin所说,全局范围内的变量应该可以在声明后加载的所有脚本访问。您也可以使用window或(在全球范围内)this的属性以获得相同的效果。

// first.js 
var colorCodes = { 

    back : "#fff", 
    front : "#888", 
    side : "#369" 

}; 

...在另一个文件...

// second.js 
alert (colorCodes.back); // alerts `#fff` 

...在HTML文件...

<script type="text/javascript" src="first.js"></script> 
<script type="text/javascript" src="second.js"></script> 
+3

在浏览器中,'window' *是全局作用域 - 因此window.colorCodes和(全局)对象colorCodes是同一个对象。 – Piskvor 2010-07-14 08:22:06

+0

真的......我提到它的原因是您需要从非全局范围设置全局变量的情况。 – 2010-07-14 08:28:37

4

如果您将颜色代码存储在全局变量中,则应该可以从任意一个javascript文件访问它。

+0

你可以请示例代码? – 2016-06-18 09:23:52

+1

@edwardtorvalds - 查看接受的答案例如 – Fermin 2016-06-20 07:04:43

9

这应该工作 - 定义firstfile一个全局变量并从secondfile访问它:

<script src="/firstfile.js"></script> 
<script src="/secondfile.js"></script> 

firstfile.js:

var colors = { 
    text:'#000000', 
    background:'#aaaaaa', 
    something_else:'blue' 
}; 

secondfile.js:

do_something_with(colors.background); 

请注意,您在其中加载脚本文件,该命令是用于一些浏览器显著(IE6肯定的,也许其他人)

+1

您可能需要将该变量附加到对象,如:this.colors = colors。如果它是一个对象而不是一个枚举,你可以创建一个函数来返回值。 this.getTextColor = function(){return colors.text; }; – aggaton 2013-01-20 21:02:55

+0

是的!订单评论在 – 2013-12-24 23:26:50

+1

上是正确的你将如何更新来自加载页面的变量? 似乎不起作用。 – v3nt 2016-06-21 16:26:50

3

我碰到amplify.js来了。它使用起来非常简单。要存储的值,我们把它称为“myvalue的”,你这样做:

amplify.store("myKey", "myValue") 

并访问它,你做

amplify.store("myKey") 
5

我不喜欢什么answer above说不过虽然,它并没有奏效我

,因为我是declaring这些变量inside JQuery的$(document).ready()

所以请确保你在<script>标签内声明你的变量而不是其他地方

0

我可能会这样做有点不同。我不确定为什么我使用这种语法,很久以前从某本书中复制它。但是我的每个js文件都定义了一个变量。第一个文件,没有任何理由,被称为R:

var R = 
    { 
     somevar: 0, 
     othervar: -1, 

     init: function() { 
      ... 
     } // end init function 

     somefunction: function(somearg) { 
      ... 
     } // end somefunction 

     ... 

    }; // end variable R definition 


    $(window).load(function() { 
     R.init(); 
    }) 

然后,如果我有一个很大的一块,我想分离,我把它放在一个单独的文件和不同的变量名称代码,但我仍然可以引用R变量和函数。我呼吁没有很好的理由,在所有新的TD:

var TD = 
    { 
     xvar: 0, 
     yvar: -1, 

     init: function() { 
      ... 
     } // end init function 

     sepfunction: function() { 
      ... 
      R.somefunction(xvar); 
      ... 
     } // end somefunction 

     ... 

    }; // end variable TD definition 


    $(window).load(function() { 
     TD.init(); 
    }) 

你可以看到,其中在TD“sepfunction”我叫R.somefunction。 我意识到这不会提供任何运行效率,因为这两个脚本需要加载,但它确实帮助我保持我的代码组织。

相关问题