从函数返回的变量一旦返回就没有定义

Returning variable from function is undefined once returned

本文关键字:返回 定义 函数 变量      更新时间:2023-09-26

是否有任何理由:

function find_parent_p(x){
    daddy = jQuery(x).parent();

    if(daddy.attr("tagName").toLowerCase() == 'p'){
        console.log(daddy,"result");
        return (daddy);
    } else {
        find_parent_p(daddy);
    }
}
jQuery(document).ready(function($){
        $('img').each(function(){
            next = find_parent_p($(this));
        })

});

将在控制台中返回一个jQuery对象(预期的行为),其中如下返回Undefined我所做的就是将对console.log的调用移动到函数之外,并在调用它之后:

function find_parent_p(x){
    daddy = jQuery(x).parent();

    if(daddy.attr("tagName").toLowerCase() == 'p'){
        return (daddy);
    } else {
        find_parent_p(daddy);
    }
}
jQuery(document).ready(function($){
        $('img').each(function(){
            next = find_parent_p($(this));
                    console.log(next,"result");
        })

});

您在else条件中缺少return语句。如果你的函数递归,那么顶层调用将不会返回任何东西,你将以undefined结束。

else {
    return find_parent_p(daddy);
}

我不确定这是否是导致问题的原因,但是该函数只有在立即找到元素时才能工作。

  • daddy设置为局部变量(以防止与全局变量发生冲突)
  • 返回递归调用的结果

:

function find_parent_p(x) {
  var daddy = jQuery(x).parent();
  if(daddy.attr("tagName").toLowerCase() == 'p') {
    return daddy;
  } else {
    return find_parent_p(daddy);
  }
}

注意:你可以只使用jQuery做同样的事情:

var next = $(this).closest('p');

如果您的目标是获取img的父元素p,您可以使用。

$('img').each(function(){
   next = $(this).closest('p');
   console.log(next,"result");
})