循环调用一组函数,动态引入script,在检查元素中的head中script显示已经被引入,但是onload函数没有被执行,并且报错如下:
export async function loadScripts(scripts: string[], callback: any) {
let HEAD = document.getElementsByTagName('head')[0]
let s = [];
let loaded = 0;
for (let i = 0; i < scripts.length; i++) {
s[i] = document.createElement('script');
s[i].setAttribute('type', 'text/label');
s[i].setAttribute('src', scripts[i]);
s[i].onload = () => {
// error: Function declared in a loop contains unsafe references to variable(s) 'loaded'
loaded++;
if (loaded === scripts.length) {
callback()
}
};
HEAD.appendChild(s[i]);
}
}
这是个啥类型?你打算让浏览器按什么规则去解析它?
P.S.1 那是个 eslint 警告,闭包问题,你应该用一个立即执行函数包裹执行。你也可以选择忽略它,其实你这么写没啥问题,你又不拿它当返回值。但 eslint 比较死板。
P.S.2 想拿 head 元素,直接用 document.head
就好了。
export async function loadScripts(scripts: string[], callback: any) {
let HEAD = document.getElementsByTagName('head')[0]
let s = [];
let loaded = 0;
for (let i = 0; i < scripts.length; i++) {
s[i] = document.createElement('script');
s[i].setAttribute('type', 'text/label');
s[i].setAttribute('src', scripts[i]);
s[i].onload = (function(index) {
return function() {
loaded++;
if (loaded === scripts.length) {
callback()
}
}
})(i);
HEAD.appendChild(s[i]);
}
}
你注释的那个报错是eslint的规则no-loop-func导致的
不过你下面的代码也有问题呀,执行必报错,c[i] 是 undefined,c[i].onload 浏览器会提示
Uncaught TypeError: Cannot set properties of undefined (setting 'onload')
<script setup lang="ts">再引入1个<script src="..."></script>,报错,请问怎么解决? 错误提示: ERROR <script> cannot use the "src" attribute when <script setup> is also present because they must be processed together.
v-for里面,有一段代码是这样的 结果出现一下报错 如果我是写死这个路径,又是正常的,用变量就不行,用函数return也不行,请问怎么解决呢?
webpack5 打包时候会报几个这种问题,怎么解决
有没有大佬来帮我看一看,是关于github actions的,我在实现一个推送代码到指定分支上时,会自动触发在远程目标服务器上面部署运行springboot项目,但是每一次运行到以下代码的时候: 它就会一直卡在这里。但是事实上,这一个项目是被正确运行了,监听端口也有信息,但是工作流中会报错: 我有一点不明白,部署成功之后,不就是应该断开ssh连接吗?有没有大佬解决一下? 因为这个地方报错,所以它工
VUE3项目中,文件夹名修改了大小写,就报错。 一开始组件是cleanData/form.vue,我重命名为CleanData/editForm.vue。引入组件时,还提示之前的form.vue,选择editForm.vue之后就报错(第二张图) 报错说仅大小写不同,重启项目也没用。为啥会这样呢? 我百度试了不写.vue也不行:
eslint版本 9.9.0 vite版本 5.4.1 在vite中,配置了自动引入,但是eslint还是会报错ESLint: 'useState' is not defined.(no-undef),eslint应该怎么配置,求大佬告知 希望可以不用没有都写import { useState } from "react"这种引入