将varriable传递给javascript函数

时间:2015-09-01 14:02:49

标签: javascript

我想将一个可变的“templateBody”传递给一个函数是否可能? 这是我的代码

function GetMenu(){
 var templates = [{name:"maher",body:"<p>Maher test</p>"},{name:"Jeremy",body:"<p>Jeremy test</p>"}]
 var payload = []
 for (var i = 0; i<templates.length; i++){
   var templateBody = templates[i].body
     payload.push({
       text : templates[i].name,
       onclick: function(templateBody){tinymce.activeEditor.execCommand('mceInsertContent', false, templateBody);}
 })
}
return payload
}

2 个答案:

答案 0 :(得分:1)

如果要调用该函数,则只能传递变量。但你不是。但是,由于所有JavaScript函数都是闭包,因此您仍然可以访问在更高范围内定义的任何变量。没什么特别的。

您的代码存在的问题是您使用参数 templateBody 阴影 变量 templateBody。删除它:

function(templateBody) -> function()

另一个问题是你在循环中创建一个函数。这对闭包不起作用,但有解决方案:JavaScript closure inside loops – simple practical example

答案 1 :(得分:0)

你有:

function(templateBody){
  tinymce.activeEditor.execCommand('mceInsertContent', false, templateBody);
}

鉴于属性的名称,我希望在onclick事件触发时调用此属性。将事件作为templateBody注入函数,它不会使用上面定义的templateBody。

此外,templateBody被用作循环内的闭包,这意味着它不会对定义的函数保持不变。你需要一个合适的闭包模式:

(function(templateBody){
  return function() {
    tinymce.activeEditor.execCommand('mceInsertContent', false, templateBody);
  }
})(templateBody);