命名空间和全局变量
Namespaces and global variables
我正在使用JavascriptMVC(你不需要知道!)和他们管理文件依赖关系的库"窃取"。
我是javascript的初学者,在名称空间方面有些东西我不懂;我需要一些由PHP初始化的全局变量,这些变量将在许多其他JS文件中使用,这就是为什么我想使它们全局化:
index.php
<script type="text/javascript">
steal('jquery', function() {
// here is some jquery specific code
var appletVersion = '<?php echo $appletVersion; ?>';
var baseUrl = '<?php echo BASE_URL; ?>';
});
</script>
在我的JS文件中,我无法访问这两个变量,因为我已经放入了score('jquery',function(){…});我猜他们在那个街区外是看不见的。
test.js
steal('jquery', function(){
console.log(baseUrl); // error
});
这是因为您的两个变量是传递给窃取的函数的本地变量。我的建议是始终将全局称为window.globalName
,以明确您的意图。
steal('jquery', function() {
// here is some jquery specific code
window.appletVersion = '<?php echo $appletVersion; ?>';
window.baseUrl = '<?php echo BASE_URL; ?>';
});
// Now you can access window.appletVersion anywhere in your code
请注意,不需要等待窃取来获取jQuery来初始化这些变量,所以您可以在外部(全局范围级别)进行初始化。
命名空间
比使用window.globalName
更好的解决方案是在全局级别创建自己的命名空间,这样就可以将全局命名空间污染限制在单个对象上。这将有助于调试,因为您的所有代码不会与全局对象上的其他属性混合。只需console.log,您就可以查看所有自己的全局。
var myNs = {}; // Put all your globals, classes, functions in here to avoid conflicts.
myNs.appletVersion = '<?php echo $appletVersion; ?>' ;
在JS中打印PHP值
当您在PHP中有一个值,并且希望将其作为JS变量打印在页面上时,应该使用json_encode
。如果字符串中嵌入了换行符、引号甚至二进制数据,那么就不会有问题了。你甚至不必担心类型,json_encode
输出的东西总是有效的,可以在JavaScript 中使用
myNs.appletVersion = <?php echo json_encode($appletVersion); ?>;
myNs.baseUrl = <?php echo json_encode(BASE_URL); ?>;
相关文章:
- js命名空间和变量范围
- 在Firebug控制台中监视javascript命名空间变量
- 用自定义javascript全局命名空间替换窗口
- 从html文件中的脚本标记调用非全局命名空间函数
- 正在测量全局命名空间的污染
- 带有 jquery、全局命名空间的变量的 $ 前缀
- jQuery 函数的全局命名空间问题
- 使用require.js后,如何通过简单的脚本引用访问jquery全局命名空间
- 检查全局命名空间中是否存在没有备用名称的变量
- Javascript 全局变量命名冲突
- 为什么Google闭包编译器在原始命名空间为空的情况下向全局命名空间添加变量
- 命名空间和全局变量
- 全局命名空间变量
- javascript匿名函数:这个变量是如何在全局命名空间中公开的
- 在javascript d3.js中使用命名空间时,全局变量未更新
- 自调用函数javascript清理全局命名空间上的变量
- Javascript全局变量和命名空间
- 一个全局命名空间中的所有窗口变量
- JavaScript—自调用的匿名函数是否能够充分保护变量免受全局命名空间的影响?
- 访问命名空间中的全局变量