这个javascript函数在做什么?
这是我需要修改的前承包商编写的代码摘录。我迷失在({function(e)})和闭包中 代码向验证服务器发出http请求,并返回设置myPlugin对象(r=e)的成员变量的令牌。然后,该函数将foobar.js动态加载到附加到head标记的新脚本标记中。js中的代码引用myPlugin对象的getter函数 我只需要删除http请求和回调,并传递一个参数来设置r的值,然后将新的脚本标记附加到head标记 每次我试图修改loadPluginJsFn函数时,都会出现错误 有人能解释loadPluginJsFn函数在做什么,以及foobar.js末尾的“(myPlugin);”和myPlugin对象末尾的()的用途吗 HTML文件这个javascript函数在做什么?,javascript,Javascript,这是我需要修改的前承包商编写的代码摘录。我迷失在({function(e)})和闭包中 代码向验证服务器发出http请求,并返回设置myPlugin对象(r=e)的成员变量的令牌。然后,该函数将foobar.js动态加载到附加到head标记的新脚本标记中。js中的代码引用myPlugin对象的getter函数 我只需要删除http请求和回调,并传递一个参数来设置r的值,然后将新的脚本标记附加到head标记 每次我试图修改loadPluginJsFn函数时,都会出现错误 有人能解释loadPlug
下面是将该函数转换为可读性更强的代码:
loadPluginJsFn: function(cb) {
if (typeof cb == "function") {
cb(function(response) {
if (response) {
r = response;
// Load the script from foobar.js
var url = "js/foobar.js";
var t = document.createElement("script");
t.type = "text/javascript";
t.src = url;
document.querySelector("head").appendChild(t);
}
});
}
}
cb
将是执行对
的AJAX请求的函数。收到响应后,它会调用函数(响应)
。这将插件变量r
设置为响应,然后加载js/foobar.js
脚本
foobar.js
然后执行使用MyPlugin
对象的代码(我假设您省略了这些细节),该代码大概使用r
总结:它从使用AJAX的
中获取一个值,将其放入MyPlugin
中的r
变量中,然后运行使用该插件的代码。结果表明,删除代码要比添加代码容易得多。感谢@cucaracho和@barmar的批判性见解。这是我想出的解决办法
我不再需要AJAX调用了——这正是我想要删除的。从loadPluginJsFn中删除回调被证明是一个挑战。我打扫了房子,确认它仍然正常工作
loadPluginJsFn(token) {
r = token,
doc = document.createElement("script");
doc.type = "text/javascript";
doc.src = "js/foobar.js";
document.querySelector("head").appendChild(doc);
}
这看起来像是一个像巴别塔或缩小机这样的transpiler的输出。你没有原始代码?它将有更多有意义的变量名和更容易理解的控制结构。要么@Barmar是对的,某个地方的repo中有更好的代码,要么你的顾问滥用了复制/粘贴函数,应该被证明是正确的。调用函数
var foo=function(){}代码>在它的引用后面附加括号:foo()代码>。因此,如果您在定义(var foo=function(){})()之后加上括号代码>,将其注册为对象后立即调用。因此它被称为立即调用的函数
。我认为它所做的是对
执行一个AJAX请求,该请求将返回JavaScript文件的URL,然后加载该JS文件。但我不确定foobar.js
是否适合。我认为这看起来像是某种类型的模糊代码,谢谢您的确认。这就是github中的内容@谢谢你的解释。这在上下文中是完全有道理的。(为保护我而消毒)
loadPluginJsFn: function(cb) {
if (typeof cb == "function") {
cb(function(response) {
if (response) {
r = response;
// Load the script from foobar.js
var url = "js/foobar.js";
var t = document.createElement("script");
t.type = "text/javascript";
t.src = url;
document.querySelector("head").appendChild(t);
}
});
}
}
loadPluginJsFn(token) {
r = token,
doc = document.createElement("script");
doc.type = "text/javascript";
doc.src = "js/foobar.js";
document.querySelector("head").appendChild(doc);
}