Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么函数返回未定义,如何调试它?_Javascript_Jquery - Fatal编程技术网

Javascript 为什么函数返回未定义,如何调试它?

Javascript 为什么函数返回未定义,如何调试它?,javascript,jquery,Javascript,Jquery,我正在试验数据变量中的闭包和类,在下面的示例中,即使我在函数返回结果之前放置了一个console.log(),但仍然没有定义。如果它没有附加到事件处理程序,它似乎可以工作。有人能告诉我为什么会发生这种情况,以及是否有办法确定错误到底发生在哪里?调试时,它直接从控制台日志转到错误,我不明白这有什么意义 要触发错误,请运行代码段并单击名称 $(“#personals”)中的相同函数。在IndividualsList()中调用数据('functions')时,可以链接数据并正常工作,但不能从事件侦听器

我正在试验数据变量中的闭包和类,在下面的示例中,即使我在函数返回结果之前放置了一个
console.log()
,但仍然没有定义。如果它没有附加到事件处理程序,它似乎可以工作。有人能告诉我为什么会发生这种情况,以及是否有办法确定错误到底发生在哪里?调试时,它直接从控制台日志转到错误,我不明白这有什么意义

要触发错误,请运行代码段并单击名称

$(“#personals”)中的相同函数。在
IndividualsList()
中调用数据('functions')
时,可以链接数据并正常工作,但不能从事件侦听器调用,然后结果将变得未定义

$(文档).ready(函数(){
var thisWindow=$(“#个人”);
变量随机名称=['Sonia Small','Kurt Archer','Reese Mullins','Vikram Rayner','Jethro Kaye','Suhail Randolph','Kaydon Crouch','Jamal Elliott','Herman Atkins','Sia Best','Kory Gentry','Fallon Sawyer','Zayyan Hughes','Ayomide Byers','Emilia Key','Jaxson Guerro','Gracey Frazier','Millie Mora','Akshay Parker','Margareta Emiliana];
生成的个人风险值=[];
函数生成器个人(名称){
返回{
个人姓名:姓名
};
}
功能独立列表(元素){
var列表=[];
this.add=函数(thisIndividual){
$(“#个人”).data('functions').init(元素,列表).add(thisIndividual);
}
this.refresh=函数(){
$(“#个人”).data('functions').init(元素,列表).refresh();
}
this.sort=函数(顺序){
$(“#个人”).data('functions').init(元素,列表).sort(顺序);
}
}
thisWindow.data('函数',(函数()){
var元素=$();
var列表=[];
返回{
添加:功能(此个人){
列表。推送(该个人);
返回thisWindow.data(“函数”);
},
init:函数(thisElement,thisList){
元素=此元素;
列表=此列表;
返回thisWindow.data(“函数”);
},
刷新:函数(){
var thisList=element.html(“”);
for(设i=0;ib.IndividualName)返回1*订单;
返回0;
});
console.log(thisWindow.data('functions'));
返回thisWindow.data(“函数”);
}
}
})());
for(设i=0;i<20;i++){
让nameNum=Math.floor(Math.random()*randomNames.length);
让thisClient=generateIndividual(randomNames[nameNum]);
generatedIndividuals.push(此客户端);
}
(功能(){
var targetElement=thisWindow.find('div.individuals-list');
var targetData={}
数据('individualsList',新的individualsList(targetElement));
targetData=targetElement.data('individualsList');
for(设i=0;i
。个人列表{
边框:1px实心;
光标:指针;
}

您引用了错误的
sort()
函数,因此调用该函数时不正确,因此返回undefined。然后对从sort返回的undefined函数调用refresh()。原因如下:

在IFFE中,您可以使用.data()在
this窗口上设置
data=new IndvidualsList
。find('div.individuals-list')

此代码:

thisWindow.find('div.individuals-list').data('individualsList')
返回实例化的IndividualsList对象:

IndividualsList = $1
add: function(thisIndividual)
refresh: function()
sort: function(fieldName, order)
  IndividualsList Prototype
请注意
sort()
函数的定义。此对象中的排序需要两个参数,
fieldName
order
;但是您调用
sort()
,只传递
order

这表示您对sort()函数的期望不正确,或者在该代码行(在单击处理程序中)提供了错误的排序函数

如何调试

  • 在中提供的JavaScript的第132行设置断点 小提琴
  • 单击列表中的名称
  • 在断点处(执行暂停),移动到控制台并在控制台中运行:
    此窗口。查找('div.individuals-list')。数据('individualsList')
  • 注意函数列表中的sort()函数定义
  • 接下来,在控制台中运行以下语句:

    thisWindow.find('div.individuals-list').data('individualsList').sort(order)


  • 注意返回值是未定义的,返回值不会从闭包转移到调用它的实例,类必须这样更改:

    function IndividualsList(element) {
      var list = [];
    
      this.add = function(thisIndividual) {
        return $('#Individuals').data('functions').init(element, list).add(thisIndividual);
      }
      this.refresh = function() {
        return $('#Individuals').data('functions').init(element, list).refresh();
      }
      this.sort = function(order) {
        return $('#Individuals').data('functions').init(element, list).sort(order);
      }
    }
    

    断点可能位于
    IndividualsList()中的一个
    的方法,因此可以注意到闭包返回所需的对象,而方法不返回。函数或方法的不同名称将有助于加强它们是分开的。

    哪一个?我看到
    IndividualsList
    中的所有方法都没有返回语句…其他方法?哪个方法返回undefined?@JaromandaX我已经在问题中添加了澄清。@EKW
    $(“#个人”)中的排序。数据('functions')
    ,从事件侦听中的
    IndividualsList()
    中调用