Javascript 了解'的功能;这';在某种背景下

Javascript 了解'的功能;这';在某种背景下,javascript,jquery,Javascript,Jquery,我已经尽了最大努力去理解这一点,但无法理解为什么“this”在第一个代码中不起作用,但在第二个代码示例中起作用 首先(这里不起作用) 在这里,selectChildren()函数有一个参数,当调用函数时,这个被传递给函数,它就工作了 秒 $('#' + ID).parent().siblings().each(function() { selectChildren(this); }); function selectChildren(esd) { $(esd).children

我已经尽了最大努力去理解这一点,但无法理解为什么“this”在第一个代码中不起作用,但在第二个代码示例中起作用

首先(这里不起作用)

在这里,selectChildren()函数有一个参数,当调用函数时,这个被传递给函数,它就工作了

$('#' + ID).parent().siblings().each(function() {
    selectChildren(this);
});

function selectChildren(esd) {
    $(esd).children('.left-links-dashboard').css({
        'color': 'grey',
        'font-weight': '400'
    });
    $(esd).children('.left-links-dashboard').children('i').removeClass('fa-arrow-circle-right').addClass('fa-angle-right');

}

已通读stackoverflow、MDN和其他资源,但无法理解第二个代码示例的工作原理。任何解释都会对我很有帮助。谢谢

引用当前函数参考

但是在您的第一个代码中,
位于包装器的内部
selectChildren()
,因为该函数是在另一个函数中调用的, 如果你想让第一个代码工作,你可以这样做



$('#' + ID).parent().siblings().each(selectChildren); 
// I removed the anonymouse function to set the reference of the jquery element directly to selectChildren function 

function selectChildren() {
    $(this).children('.left-links-dashboard').css({
        'color': 'grey'
    });
    //this one doesn't work..why ????
}  

引用当前函数引用

但是在您的第一个代码中,
位于包装器的内部
selectChildren()
,因为该函数是在另一个函数中调用的, 如果你想让第一个代码工作,你可以这样做



$('#' + ID).parent().siblings().each(selectChildren); 
// I removed the anonymouse function to set the reference of the jquery element directly to selectChildren function 

function selectChildren() {
    $(this).children('.left-links-dashboard').css({
        'color': 'grey'
    });
    //this one doesn't work..why ????
}  

javascript中的
this
是函数所有者的上下文。看

您的第一个示例暗示被调用的函数由
窗口
对象拥有。如果希望以“jquery方式”使用函数:

$(this.selectChildren()


然后研究如何编写jquery插件:

javascript中的
这个
是函数所有者的上下文。看

您的第一个示例暗示被调用的函数由
窗口
对象拥有。如果希望以“jquery方式”使用函数:

$(this.selectChildren()


然后研究编写jquery插件:

,因为在第二个插件中,您将
这个
作为参数传递。否则,
指的是从下面的答案中选择Childrenaside的函数,您也可以使用以下命令使第一个示例正常工作:
selectChildren.call(this)基思。这是我无法理解的。当一个参数被传递给selectChildren()函数时,它就工作了。但是如果没有这个参数调用它就不起作用。我正在努力理解它是如何工作的。是的,我最近读了《打电话申请》。你说得对,我可以打电话。在第一种情况下,如果我不理解为什么它不起作用,我就不能继续前进。因为在第二种情况下,你把这个作为一个参数传递。否则,
指的是从下面的答案中选择Childrenaside的函数,您也可以使用以下命令使第一个示例正常工作:
selectChildren.call(this)基思。这是我无法理解的。当一个参数被传递给selectChildren()函数时,它就工作了。但是如果没有这个参数调用它就不起作用。我正在努力理解它是如何工作的。是的,我最近读了《打电话申请》。你说得对,我可以打电话。显然,如果不理解为什么在第一种情况下它不起作用,我就无法继续前进。
如果你想以“jquery方式”使用你的函数:$(this)。选择children()
,函数需要作为插件完全重新编写。在jQuery中,有更简单、更快的方法可以在给定的范围内执行代码,而不必求助于它。
如果您想以“jQuery方式”使用您的函数:$(this)。为此,选择children()
,函数需要作为插件完全重新编写。在jQuery中,有更简单、更快的方法可以在给定范围下执行代码,而无需求助于该范围。