Dal*_*ang 5 html javascript html5 global-variables
我有一个关于全局脚本的问题,我现在正在使用以下脚本,因为这些函数在每个页面上全局使用.(在我拥有与unit converter8个地方定义的函数相同的函数之前,现在我将它移动到全局脚本,所以我只定义一次.)
我的问题是,这是一种有效的方法还是最佳做法?我真的需要它们全局定义并在其他脚本调用这些方法之前加载.
我搜索过这样的文章建议不要使用全局函数.https://www.w3schools.com/js/js_best_practices.asp
避免使用全局变量
最大限度地减少全局变量的使用.
这包括所有数据类型,对象和函数.
全局变量和函数可以被其他脚本覆盖.
改为使用局部变量,并学习如何使用闭包.
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
/*-----------------------------------------------------
global function for Set/Get Cookie
------------------------------------------------------*/
function setCookie(cname,cvalue,exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
}
/*-----------------------------------------------------
global function for ...
------------------------------------------------------*/
function getLBS_Global(p, q, u, b, wb) {
if (b === null || wb === null) {
alert("Error in unit conversion, please retry");
}
var out = {};
switch (u) {
case "8": // A bushel
out.q = (q * b);
out.p = (p / b);
break;
case "10": // lbs
out.q = q;
out.p = p;
break;
case "11": // cwt
out.q = (q * 100);
out.p = (p / 100);
break;
case "12": // metric tonne
out.q = (q * 2204.62262);
out.p = (p / 2204.62262);
break;
case "136": // W bushel
out.q = (q * wb);
out.p = (p / wb);
break;
}
return out;
}
</script>
</head>
<body>
...
</body>
Run Code Online (Sandbox Code Playgroud)
是的,这是有效的。
如果您不想污染全局范围(并避免名称冲突),最佳实践是将函数包装在对象内并将该对象公开到全局范围
这是一个示例,但其想法是根据函数的行为将函数捆绑在一起
<script type="text/javascript">
(function(global){
function setCookie(cname,cvalue,exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
}
global.bundleObj = {
setCookie: setCookie,
getCookie: getCookie
}
})(window)
</script>
Run Code Online (Sandbox Code Playgroud)
然后在你的代码中的任何地方
<script>
window.bundleObj.setItem()
</script>
Run Code Online (Sandbox Code Playgroud)