Nov*_*gda 2 javascript eval settimeout
以下是它在 Chrome 开发工具中的显示示例:
setTimeout(console.log(`String`), 100);
Run Code Online (Sandbox Code Playgroud)
字符串 拒绝将字符串评估为 JavaScript,因为“unsafe-eval”不是以下内容安全策略指令中允许的脚本源:“script-src'self' 'unsafe-inline' https:”。
此警报意味着什么以及将 setTimeout 与字符串一起使用的安全问题是什么?
你用setTimeout错了。
当你在 JS 中的函数后面添加括号时,它会立即调用该函数,并用该函数的返回值“替换”表达式。
但是,对于setTimeout,您不想调用该函数,您想setTimeout调用它!为此,您可以在不调用该函数的情况下提供该函数setTimeout,并setTimeout在计时器关闭时在内部为您调用它。
但您的代码确实调用了函数 ,console.log并且仅将其返回值 ( undefined)赋予setTimeout。setTimeout但不会抛出错误 - 它有一个旧的“功能”,如果您将字符串传递给它,它会像您使用eval.
undefined不是字符串,但也不是函数,因此当计时器到期时,setTimeout会将其转换为字符串 ( "undefined") 并尝试eval。这就是您收到警告的原因。
您可以通过将函数传递给setTimeout“好方法”来解决此问题:将您的调用包装到另一个函数中。这样,您的外部函数将console.log在调用时调用,因此您可以将其传递给setTimeout:
setTimeout(() => console.log(`String`), 100);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2537 次 |
| 最近记录: |