js怎么引用另一个js文件

cheelumbill 2013-01-07 02:59:40
需求可能比较诡异。

就是引用一个a.js文件里会引用另一个b.js文件,而且要求被引用的b.js文件中的代码先执行,然后再执行a.js余下的代码。

因为需要执行的js比较多,之间有一些依赖关系,人肉整理太麻烦了。目测用异步的东东是可以弄的。
...全文
1038 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
foolbirdflyfirst 2013-01-08
  • 打赏
  • 举报
回复
引用 10 楼 cheelumbill 的回复:
引用 9 楼 foolbirdflyfirst 的回复:有无研究过AMD规范?,比较流行的有Requirejs和Seajs,都挺成熟了。 对不起,我只是个JS新手,没研究过。RequireJS试了下,似乎也和前面一样,加载顺序正确,执行顺序不太一致
在加载顺序的基础上,你还要自己指定回调保证执行顺序。如果依赖逻辑过多造成回调层次过深,你还可以试试老赵的Windjs,用同步思维写异步代码
cheelumbill 2013-01-07
  • 打赏
  • 举报
回复
引用 9 楼 foolbirdflyfirst 的回复:
有无研究过AMD规范?,比较流行的有Requirejs和Seajs,都挺成熟了。
对不起,我只是个JS新手,没研究过。RequireJS试了下,似乎也和前面一样,加载顺序正确,执行顺序不太一致
foolbirdflyfirst 2013-01-07
  • 打赏
  • 举报
回复
有无研究过AMD规范?,比较流行的有Requirejs和Seajs,都挺成熟了。
cheelumbill 2013-01-07
  • 打赏
  • 举报
回复
引用 5 楼 yenange 的回复:
引用 2 楼 cheelumbill 的回复:引用 1 楼 hujife 的回复:这样可以按顺序加载 JavaScript code?12345678910111213141516171819202122232425loadScript("file1.js", function(){loadScript("file2.js", function(){loadScript……
我一开始考虑的是希望不要用回调的那样,而是前面阻塞一下,这样原来代码改动可能会小点,只是回调也基本能接受。
cheelumbill 2013-01-07
  • 打赏
  • 举报
回复
引用 6 楼 hujife 的回复:
JavaScript code?123456789101112 if (script.readyState) { //IE script.onreadystatechange = function() { if (script.readyState == "loaded" || script.readyState == "comp……
那可能是我没把需求说清楚。我是希望被引用的文件中的代码先执行,不仅仅是加载完成,必须是执行完成。
tcpfeng 2013-01-07
  • 打赏
  • 举报
回复

    if (script.readyState) { //IE
        script.onreadystatechange = function() {
            if (script.readyState == "loaded" || script.readyState == "complete") {
                script.onreadystatechange = null;
                callback();
            }
        };
    } else { //Others
        script.onload = function() {
            callback();
        };
    }
看上面代码,意思说加载完“2-1.js”就callback()加载“2-2.js”,这时候“2-1.js”加载完了应该就运行,那就会弹出3。那加载“2-2.js”完成了,那又不是要运行callback()?这时候的就应该会运行alert("1end"),而“2-2.js”加载完运行了。
吉普赛的歌 社区高级成员 T9 2013-01-07
  • 打赏
  • 举报
回复
引用 2 楼 cheelumbill 的回复:
引用 1 楼 hujife 的回复:这样可以按顺序加载 JavaScript code?12345678910111213141516171819202122232425loadScript("file1.js", function(){loadScript("file2.js", function(){loadScript("file3.js", function()……
这个东东, 并不是并行的。 所以你得象 #1 楼那样,1个接1个地全放在回调函数里(嵌套进行)。
cheelumbill 2013-01-07
  • 打赏
  • 举报
回复
引用 3 楼 hujife 的回复:
这样就对了,你加载完最后一个就不要callback()了
对不起,不是很明白。
tcpfeng 2013-01-07
  • 打赏
  • 举报
回复
这样就对了,你加载完最后一个就不要callback()了
cheelumbill 2013-01-07
  • 打赏
  • 举报
回复
引用 1 楼 hujife 的回复:
这样可以按顺序加载 JavaScript code?12345678910111213141516171819202122232425loadScript("file1.js", function(){loadScript("file2.js", function(){loadScript("file3.js", function(){alert("All files ……
非常感谢,我明白你的意思了,不过刚才测了下似乎有点不大对,能看下吗? 我一共有4个js文件1引用2-1和2-2,2-1和2-2都引用3

//1.js
alert('1begin');
loadScript("2-1.js", function(){
loadScript("2-2.js", function(){
alert("1end");
});
});
//2-1.js
alert("2-1begin");
loadScript("3.js", function(){
alert("2-1end");
});
//2-2.js
alert("2-2begin");
loadScript("3.js", function(){
alert("2-2end");
});
//3.js
alert(3);
输出是

//Chrome23
1begin
2-1begin
3
2-1end
2-2begin
1end
3
2-2end
1end应该是最后输出的才对吧。
tcpfeng 2013-01-07
  • 打赏
  • 举报
回复
这样可以按顺序加载

loadScript("file1.js", function(){
loadScript("file2.js", function(){
loadScript("file3.js", function(){
alert("All files are loaded!");
});
});
});
function loadScript(url, callback){
var script = document.createElement ("script")
script.type = "text/javascript";
if (script.readyState){ //IE
script.onreadystatechange = function(){
if (script.readyState == "loaded" || script.readyState == "complete"){
script.onreadystatechange = null;
callback();
}
};
} else { //Others
script.onload = function(){
callback();
};
}
script.src = url;
document.getElementsByTagName_r("head")[0].appendChild(script);
}
一套目前来说最好的nestjs实战教程,提供QQ长期问答服务. 本人从 08 年到 18 年一直从事于 PHP 的开发。从 18 年开始转向 Typescript+React+Nestjs 的技术栈。目前来说 React 应该是一个非常好用的前端框架,生态非常完善,并且十分灵活简单。Nestjs 则是 Node.js 中唯一且无敌存在的后端 web 框架。因为我个人从事这套技术栈开发已经 4 年多,所以颇有心得,做了这套 React18 视频教程和 Nestjs 实战视频教程。现在视频教程也是刚刚开始做了一部分,还在持续更新。使用 TS 全栈开发可以基本涵盖各种平台的方方面面,比如开发桌面应用的 Electron, 开发小程序的 Taro, 开发 Spa 中后台的 React,开发 SSR 网站的 next.js,开发移动应用的 React Native, 开发 CLI 的 Yargs, 以及开发后端的 Nestjs。基本学会一套,全面够用,再加上 Monorepo 组织结构,一个仓库所有平台都可以搞定。 包含以下知识点 - 掌握Nestjs框架的依赖注入,模块,提供者,生命周期等概念- 掌握DTO数据验证,响应序列化,异常过滤器等常用功能- 学会编写一些常用的class-validator验证约束- 熟练掌握Typeorm以及Nestjs与Typeorm结合开发- 学会整合Swagger输出Open API文档- 掌握TS装饰器以及反射元数据的定义和使用- 编写一些数据库相关的数据验证约束(比如树形表的同级别某字段唯一验证等)- 学会通过继承并魔改Nestjs源码编写自定义的全局验证器- 可以编写自定义的配置系统以及核心功能包- 学会自定义的代码组织方式(比如教程中我把默认的Nestjs应用改成Util+PluginModule模式)- 掌握编写一些常用的Util仓库(比如数据库,Redis,Restful)- 利用Yargs结合魔改后的框架可以编写一些自定义CLI命令(比如数据迁移,数据填充等)- 掌握如何利用阿里云/腾讯云推送邮件和短信- 掌握使用消息列队(MQ)的方式异步推送邮件和短信- 掌握守卫原理以及编写一些用户验证的守卫- 编写一个完善的用户系统(JWT认证,短信/邮件登录,短信/邮件注册,找回密码,绑定手机和邮箱等)- 熟练地通过编写装饰器去实现一些常用的功能- 通过SSE,WebSockets实现用户的上线,下线以及消息实时推送,消息广播等- 学会使用云存储来上传文件- 学会大文件断点雪川- 实现RBAC的权限系统- 理解请求范围概念以及性能方便的考量- 自己构建配置系统,实现配置验证以及通过YAML或数据库来进行动态配置- 通过适用Vscode进行Debug以及编写Jest测试来提升开发效率与程序的可用性- 学会使用Node来编写自定义的CLI命令- 利用NestCURD进行快速开发- 学会Graphql替代Restful写API- 使用Mongodb替代关系型数据库- 掌握一些常用的打包工具,比如通过ncc打包成单文件,通过pack打包成二进制等- 学会一些常用的部署方式,比如通过nginx+pm2反向代理部署,devops自动化CI,CD等- 学会使用pnpm workspaces来使用monreopo组织代码

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧