Javascript 即使语法正确,Eval()也不执行

Javascript 即使语法正确,Eval()也不执行,javascript,syntax,eval,Javascript,Syntax,Eval,我正在尝试使用eval()执行事件侦听器 但是,控制台从不记录日志。 当我将eval()替换为console.log时,它表明字符串具有正确的语法 ["document.addEventListener('load', "].forEach(f => { console.log(f + 'function(){ console.log("test") })'); }) // logs 'document.addEventListener('loa

我正在尝试使用eval()执行事件侦听器

但是,控制台从不记录日志。 当我将eval()替换为console.log时,它表明字符串具有正确的语法

["document.addEventListener('load', "].forEach(f => {
  console.log(f + 'function(){ console.log("test") })');
}) // logs 'document.addEventListener('load', function(){ console.log("test") })'
那么,如果语法正确,有什么问题

当我从字符串中删除“
function()
”并直接触发“
console.log
”时,它就工作了

["document.addEventListener('load', "].forEach(f => {
  eval(f + 'console.log("nice"))');
}) // this works

我搬到这里是因为我的回答更长

您可以尝试一个函数,该函数接受代码字符串,并在加载页面时立即运行,否则请添加事件侦听器

函数在加载时运行(代码字符串){
if(document.readyState==='complete'){//检查是否已加载该文件
eval(代码字符串);
否则{
document.addEventListener('load',()=>eval(codeString));
}
}

事件侦听器仅在可能已经发生的加载事件上激发happened@Scrapper142但是当我从字符串中删除'function()'并直接触发'console.log',比如eval(f+'console.log(“nice”)),它可以工作。如果窗口加载已经发生,那么它不会以任何方式工作吗?在第二个示例中,它所计算的字符串是
'document.addEventListener('load',console.log('nice'))'
,因此,由于您直接执行
console.log(“nice”)
,所以它会执行它(打印时),但随后添加事件处理程序将变为未定义。您是对的。是否有可以使用的document.addEventListener(“加载”)替代方法?我需要在应用程序开始时执行此功能。是的,实际的eval()内容将设置innerHTML值。我需要在应用程序启动时设置innerHTML值,然后在稍后输入滑块时设置(这就是为什么我要做forEach,第二个字符串将是用于输入元素的eventListener。)然后您可以为滑块添加另一个事件侦听器
["document.addEventListener('load', "].forEach(f => {
  eval(f + 'console.log("nice"))');
}) // this works