对.js文件依赖包含html中声明的变量是一个好习惯

时间:2011-01-15 09:46:49

标签: javascript

简而言之:

<script type="text/javascript">
    var root = '${config.root}';
    var userLanguage = '${config.language}';
    var userTimezone = '${config.timezone}';
</script>
<script type="text/javascript" src="js/scripts.js"></script>

然后,在scripts.js中,依赖这些变量:

if (userLanguage == 'en') { .. }

${..}只是生成页面的脚本中值的占位符。它可以是php,jsp,asp,等等。关键是 - 它是动态的,因此它不能成为.js文件的一部分(它是静态的)。

那么,静态javascript文件可以依赖这些外部定义的配置变量吗? (当然,它们主要是配置)。

或者是否优先使动态提供.js文件(即将其设为.php / .jsp,并使用正确的Content-Type),并在其中定义这些值。

4 个答案:

答案 0 :(得分:1)

您可以按照jquery plugins中使用的示例进行操作。它们以特定格式定义参数的默认值,这些格式可能会被用户重载。所以在我看来,允许用户以外部脚本使用的文档格式定义一些变量是可以的。

答案 1 :(得分:1)

假设配置变量的特定值仅在运行时已知(即无法静态生成配置),将配置包含在实际脚本中是没有意义的,因为这样会使正确的缓存无法实现。

如果页面的其余部分是静态的(或仅在内容更改时重新生成),那么在服务器端动态生成专用config.js而不是将配置嵌入到HTML中可能是个好主意。 。如果页面是动态的,我认为嵌入配置没有错。

如果您赞同完全分离标记和脚本的原则,您可以在标记中对转换进行编码(例如,通过lang属性和cutom类),但纯粹主义观点不一定是最相关的。 / p>

答案 2 :(得分:1)

一般来说,我认为最佳做法是使javascript文件自包含,而不依赖于任何外部变量。

也就是说,在某些情况下,根据外部变量做正确的事情,我会说这是其中之一。注意:

  • javascript和外部变量之间的接口应该很小并且定义明确(因为它似乎在你的例子中) - 少量变量,每个变量都有明确的目的,最好是从一个常见的地方设置你的页面生成。
  • 与javascript的大小相比,更改的信息(可能)很小,因此使用静态javascript文件可以使缓存更好地工作。
  • 可能值得拥有变量的命名约定,这样任何试图维护javascript文件的人都可以清楚地看到javascript文件本身之外定义的内容。

答案 3 :(得分:1)

通常更好的想法是在初始化外部脚本中定义的组件时显式传递配置,如下所示:

<script type="text/javascript" src="js/scripts.js"></script>
<script type="text/javascript">
    MyApp.init(${config});
</script>