Javascript 将对象传递给函数JS

Javascript 将对象传递给函数JS,javascript,jquery,Javascript,Jquery,在这种情况下,如何将对象作为变量传递给函数?我正在获取console.log(设置)=未定义?有没有更好的方法将回调函数传递给getTemplate()?谢谢 功能模板 function getTemplate (name, callback, dir) { if (dir === undefined) dir = '' var xhr = new XMLHttpRequest() var url = '/core/templates/

在这种情况下,如何将对象作为变量传递给函数?我正在获取console.log(设置)=未定义?有没有更好的方法将回调函数传递给getTemplate()?谢谢

功能模板

function getTemplate (name, callback, dir) {
          if (dir === undefined) dir = ''
          var xhr = new XMLHttpRequest()
          var url = '/core/templates/' + dir + name + '.html'
          xhr.open('GET', url, true)
          xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
              var raw = xhr.responseText
              var compiled = Handlebars.compile(raw)
              callback(compiled)
            }
          }
          xhr.send()
        }
调用函数

for (var i = 0; i < item.length; i++) {
 var tabActive = ''
 if (i == 0) { tabActive = 'active' }

 var tab = item[i],
 tabId = tab.id,
 tabTitle = tab.title,
 variables = {tabActive: tabActive, tabId: tab.id, tabTitle: tab.title}

 console.log(variables) // *A increments 5328, 5329

 getTemplate('tab-nav', function (tmp) {

 console.log(variables) // *B increments 5328, 5328

 $(tabNavigationId + '>ul').append(tmp(variables))

 })

}
*B

从getTemplate“tmp”回调

function ret(context, execOptions) {
        if (!compiled) {
          compiled = compileInput();
        }
        return compiled.call(this, context, execOptions);
      }

不能在回调函数中传递变量

你需要把它当作

var setup = {tabActive: tabActive, tabId: tab.id, tabTitle: tab.title}

getTemplate('tab-nav', function (tmp) {
  //setup is accessible here
  console.log(setup)
  $(tabNavigationId + '>ul').append(tmp(setup))
})
--新更新--

您的getTemplate函数
函数getTemplate(名称、回调、目录){
期望第二个参数是回调函数。 因此,您需要做的是,使用getTemplate函数作为

getTemplate('tab-nav', myCallBackFunc, 'dir');
然后,
myCallBackFunc
将是这样的

我可以看到您正在使用一些参数调用回调

function myCallBackFunc(response) {
 //do something with response
}

另外,您还没有定义任何关于
tmp
function

的内容。如果您想要一个变量来存储对象,我想您应该选择JSON。然后您可以使用JSON.parse()要分析JSON数据并从中提取信息,请查看w3schools.org以获得更详细的解释。

很可能是您的
getTemplate
函数未正确传递所需的参数。能否显示
getTemplate
函数的代码?名为
setup
的参数正在对全局参数进行着色(在任何情况下,范围都更大)名为
setup
的变量我已将getTemplate()添加到示例中,如果我使用函数(tmp)添加变量不increment@Raf你能在jsfiddle.net中共享你的全部代码吗?我不能使用fiddle,因为代码使用文件中的本地模板。现在检查它,我已经向它添加了更多的代码。@Raf请尝试console.log(tmp)并共享输出。内,函数(tmp){@HariLamichhane我现在添加了控制台日志输出如果你想知道为什么你会被否决,这实际上更多的是一个评论而不是一个答案。无论出于什么原因在这里推荐w3schools,都会让你很快获得大量的否决票。这不是一个可靠的来源。
getTemplate('tab-nav', myCallBackFunc, 'dir');
function myCallBackFunc(response) {
 //do something with response
}