错误 - 不要在循环中创建函数 [关闭]
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 忍不住抱歉。我们不知道的事情太多了。发布另一个问题,提供有关dataPlaceholders
和 template_html
中的内容的信息以上是关于错误 - 不要在循环中创建函数 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章