Javascript 需要帮助理解为什么代码中有这一行吗

Javascript 需要帮助理解为什么代码中有这一行吗,javascript,jquery,Javascript,Jquery,这段代码在书的第99页 他为什么写这句话 无功电流=此 DOM级别0冒泡示例 $(函数(){ $('*')。每个(函数(){ 无功电流=此; this.onclick=函数(事件){ 如果(!事件) event=window.event; var target=(event.target)? event.target:event.src元素; 说('代表'+current.tagName+'#'+current.id+ “目标是”+ target.tagName+'#'+target.id);

这段代码在书的第99页

他为什么写这句话

无功电流=此


DOM级别0冒泡示例
$(函数(){
$('*')。每个(函数(){
无功电流=此;
this.onclick=函数(事件){
如果(!事件)
event=window.event;
var target=(event.target)?
event.target:event.src元素;
说('代表'+current.tagName+'#'+current.id+
“目标是”+
target.tagName+'#'+target.id);
};
});
});

他这样做是为了
这个
值可以被保存并在嵌套的词法范围内使用。对任何函数的每个函数调用都涉及(内部)根据调用的详细信息将
设置为引用某个对象。因此,在嵌套函数(在另一个函数中声明的函数,如本例中所示)中,如果需要引用
this
的“外部”值,那么就有一个问题:
this
,在该嵌套上下文中,将被设置为引用其他内容(不一定,但可能)。通过在外部上下文中“捕获”
,内部代码将能够自由引用它


顺便说一句,那是一本相当不错的书;我曾经与其中一位作者(Bear)合作过:-)

因为在为onclick定义的函数中,
this
引用事件触发的对象,所以要引用该代码块之外的
this
,必须首先将其分配给其他对象。

查看为onclick定义的函数内部。
在该函数中的含义不同,因为它是在函数运行时设置的


通过执行
var current=this
操作,它存储了
this
当前值的副本,以便可以在嵌套函数声明中使用。

这行代码的目的是能够在
this.onclick=function(event){}
函数中使用
this
的值,在这个函数中,
这个
将引用被点击的DOM元素。

所有其他答案都是正确的;我只是想让它更容易理解

由上下文指定。如果函数作为事件处理的一部分被调用,
将此
分配给触发事件的DOM元素。在上面的示例中,这将是单击的元素

以类似的方式,
这个
在循环
$('*')中。each()
是DOM中的当前元素(与选择器
'*'匹配的元素)

这意味着
在调用函数之前,浏览器会更改此
。如果要在内部单击处理程序中使用外部
this
,则必须创建对它的引用。引用保留其值,因为浏览器在创建内部单击处理程序时将复制所有可见变量


这也意味着对于所有内部单击处理程序,
current
将是一个不同的引用。对于每个处理程序,它将指向创建单击处理程序时外部
的值。

谢谢,但他写了“current.tagName”和“target.tagName”,两者之间没有区别them@tarek11011但它们是不同的——“target”是指事件的直接目标元素,而“current”是对事件处理程序函数所附加到的元素的引用。这就是这个例子的全部要点——它演示了事件冒泡是如何工作的。浏览器将从原始目标“遍历”DOM,调用每个父元素上的处理程序。在那里调用处理程序时,“target”和“current”将不同。
    <!DOCTYPE html>
<html id="greatgreatgrandpa">
    <head>
        <title>DOM Level 0 Bubbling Example</title>
        <link rel="stylesheet" type="text/css" href="../styles/core.css"/>
        <script type="text/javascript" src="../scripts/jquery-1.4.js"></script>
        <script type="text/javascript" src="../scripts/jqia2.support.js"></script>
        <script type="text/javascript">
            $( function() {
                $('*').each( function() {
                    var current = this;
                    this.onclick = function(event) {
                        if (!event)
                            event = window.event;
                        var target = (event.target) ?
                        event.target : event.srcElement;
                        say('For ' + current.tagName + '#'+ current.id +
                        ' target is ' +
                        target.tagName + '#' + target.id);
                    };
                });
            });
        </script>
    </head>
    <body id="greatgrandpa">
        <div id="grandpa">
            <div id="pops">
                <img id="example" src="example.jpg" alt="ooooh! ahhhh!"/>
            </div>
        </div>
    </body>
</html>