在javascript中使用全局函数是否有效?

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)

Kar*_*rim 4

是的,这是有效的。

如果您不想污染全局范围(并避免名称冲突),最佳实践是将函数包装在对象内并将该对象公开到全局范围

这是一个示例,但其想法是根据函数的行为将函数捆绑在一起

<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)