gpt4 book ai didi

javascript - 命名空间和全局变量

转载 作者:行者123 更新时间:2023-11-29 17:25:06 25 4
gpt4 key购买 nike

我正在使用 JavascriptMVC(你不需要知道它!)和他们管理文件依赖性的库“窃取”。

我是 javascript 的初学者,有些东西我不了解 namespace ;我需要一些由 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 文件中,我无法访问这两个变量,因为我已经放置了 steal('jquery', function(){ ... });我猜他们在那个街区之外是看不见的。

test.js

steal('jquery', function(){
console.log(baseUrl); // error
});

最佳答案

那是因为你的两个变量是传递给 steal 的函数的局部变量。我的建议是始终将全局变量称为 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

请注意,无需等待 steal 获取 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); ?>;

关于javascript - 命名空间和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com