Javascript 需要帮助理解为什么代码中有这一行吗
这段代码在书的第99页 他为什么写这句话 无功电流=此强>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);
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>