错误 - 不要在循环中创建函数 [关闭]

Posted

技术标签:

【中文标题】错误 - 不要在循环中创建函数 [关闭]【英文标题】:Error - Don't make functions within a loop [closed] 【发布时间】:2014-03-02 21:21:37 【问题描述】:

我正在尝试替换电子邮件模板中的占位符,以下是我的代码:-

我收到了error : Don't make functions within a loop

var dataPlaceholders = [
            "username":"John Johny",
            "website":"w3schools . com"
            ];

template_html = "<b>Hello <%= username %>,</b><br/><br/> You are successfuly Registered on xyz.<br/><br/>Thank you <%= website %>";

函数调用:-

function ReplacePlaceholders(dataPlaceholders, template_html)
    for (var i = 0; i < dataPlaceholders.length; i++) 
        var obj = dataPlaceholders[i];
        template_html += "" + template_html.replace("/<%=%>/g", function (match, property) 
            return obj[property];
        ) + "";

    
    return template_html;

感谢您的帮助。

【问题讨论】:

什么方面帮助您?错误消息清楚地说明了问题所在 @Zerkms 我得到了 1 个新的 error :创建新函数后....error : missing new prefix when invoking a constructor 你知道google.com是什么吗? @zerkms 我非常着急...如果你不想帮忙...留下问题...我是初学者到node.js 匆忙并不能证明懒惰,对不起。 【参考方案1】:

来自JSLint Error Explanations:

这里的基本问题是 javascript 解释器将在每次循环迭代时创建一个函数实例。它必须这样做,因为它不知道函数对象是否会在其他地方被修改。由于函数是标准的 JavaScript 对象,它们可以像任何其他对象一样具有可以在循环中更改的属性。因此,通过在循环上下文中创建函数,您会导致解释器创建多个函数实例,这可能会导致意外行为和性能问题。

【讨论】:

【参考方案2】:

这个错误是因为你在循环中创建了一个函数变量:function (match, property)

这意味着如果您的循环中有 100 个元素,它将创建 100 个匿名函数,这对性能不利。

要解决此问题,请将函数声明移到 for 循环之外。所以你的代码变成了这样

function ReplacePlaceholders(dataPlaceholders, template_html)
    // here we create a single instance of your match function
    var match = function (match, property) 
        return obj[property];
    

    for (var i = 0; i < dataPlaceholders.length; i++) 
        var obj = dataPlaceholders[i];

        // now we use our single declared instance inside the for loop
        template_html += "" + template_html.replace("/<%=%>/g", match) + "";
    
    return template_html;

【讨论】:

是的,我这样做了...但是我的邮件中没有替换占位符...wt 可能是问题所在? @Anup 忍不住抱歉。我们不知道的事情太多了。发布另一个问题,提供有关 dataPlaceholderstemplate_html 中的内容的信息

以上是关于错误 - 不要在循环中创建函数 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

分段错误推回在其类函数c ++的循环内创建的对象

jslint - 不要在循环中创建函数

javascript 使用 continue 时提示语法错误

Swift - 将变量集作为函数的数组[关闭]

创建函数时出现“MySQL语法错误”[关闭]

vue 错误:组件渲染函数中的无限更新循环