javascript - 为什么在获取脚本路径时使用自执行匿名函数

标签 javascript self-executing-function

我发现有人用这个方法来获取当前脚本位置的路径:

    _getScriptLocation: (function() {
        var r = new RegExp("(^|(.*?\\/))(" + scriptName + ")(\\?|$)"),
            s = document.getElementsByTagName('script'),
            src, m, l = "";
        for(var i=0, len=s.length; i<len; i++) {
            src = s[i].getAttribute('src');
            if(src) {
                m = src.match(r);
                if(m) {
                    l = m[1];
                    break;
                }
            }
        }
        return (function() { return l; });
    })(),

Full codes here.

但不知道为什么要使用自执行匿名函数?

为什么不用这个:

_getScriptLocation: function() {
    var r = new RegExp("(^|(.*?\\/))(" + scriptName + ")(\\?|$)"),
        s = document.getElementsByTagName('script'),
        src, m, l = "";
    for(var i=0, len=s.length; i<len; i++) {
        src = s[i].getAttribute('src');
        if(src) {
            m = src.match(r);
            if(m) {
                l = m[1];
                break;
            }
        }
    }
    return l;
}

最佳答案

在第一个(自执行函数)中,函数的过程只执行一次, 所以:

APP._getScriptLocation();
APP._getScriptLocation();
APP._getScriptLocation();

只是为每次调用返回 l(该过程将永远不会再次执行 - 它只会在您的脚本加载后执行:因为它是一个自执行函数)。

但是在第二个中,每当你调用你的方法时:

APP._getScriptLocation();

您正在一次又一次地执行所有过程,在这种情况下不需要。

关于javascript - 为什么在获取脚本路径时使用自执行匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952932/

相关文章:

javascript - axios不捕获数据并发送给客户端

javascript - 在对象字面量中调用自执行函数时出现异常

javascript - 将参数分配给具有相同名称的变量如何在 javascript 中工作?

javascript - 为什么 trim() 没有删除我的 Vue 应用程序中的前导空格?

asp.net - WebForm_SaveScrollPositionSubmit 未定义 - ASP.NET

javascript - 如何在运行时使用 blueimp fileupload 从当前上传队列中跳过文件

javascript - 你如何在 jQuery 的 document.ready 中使用揭示模块模式?

javascript - 自执行代码中的"this"

javascript - 修改自执行函数中的参数

javascript - Onclick href 事件不起作用