
字节笔记本
2026年10月7日 · 约 2 分钟读完
回调写在加载脚本之前
工具链按仓库克隆 emsdk,进入目录后安装 latest、激活 latest,再 source 环境脚本。C++ 文件里的函数把两个整数相加。绑定块的名字是 my_module,导出的函数名是 add。
编译和页面不是同一条调用
编译命令用 em++,输入 hello.cpp,输出 hello.js,打开 WASM,NO_EXIT_RUNTIME 为 1,导出运行时方法 ccall,并带上 --bind。网页标题是 WebAssembly Demo。前面一段脚本把 Module.onRuntimeInitialized 设成异步函数,里面调用 Module.add(5, 3) 并打印。后面一段才用 src 引入 hello.js。
浏览器按顺序执行。执行到第一段时,hello.js 还没运行,Module 通常还不存在。给一个不存在的对象加属性会直接出错,回调不会留下来。hello.js 随后创建自己的 Module,也不会自动捡起已经失败的那次赋值。要把回调放在库提供的占位对象上,至少得先有这个对象,再加载脚本。

若调用真的发生,五加三的结果是八。日志句子是 5 + 3 =。对话没有贴出这次运行的控制台,所以这句是按函数体算的,不是按一次已经打开的页面。
ccall 出现在导出列表里,页面却调用的是绑定生成的 add。两条路只走了绑定这一条。导出 ccall 不会修复脚本顺序。

说明里还点了 Rust 的 wasm-pack、AssemblyScript 和 Blazor,没有第二份命令。能核对的编译和调用只有 C++ 这一条。
计算放在模块里、页面结构放在脚本里,是后面的建议。建议没有改掉脚本的先后顺序。
内存和加载时间被提到,没有给出具体的字节数。不要把近原生性能写成这次加法的测量结果。



