Javascript (“menulinks”)。getElementsByTagName(“a”); 对于(var o=0;o

Javascript (“menulinks”)。getElementsByTagName(“a”); 对于(var o=0;o,javascript,html,Javascript,Html,这里有另一种解决范围界定问题的方法;将循环体包装在一个生命中。它基本上是@sfletche的答案,但“向上”一级,不需要参数: var a=document.getElementById(“menulinks”).getElementsByTagName(“a”); 对于(var o=0;o

这里有另一种解决范围界定问题的方法;将循环体包装在一个生命中。它基本上是@sfletche的答案,但“向上”一级,不需要参数:

var a=document.getElementById(“menulinks”).getElementsByTagName(“a”);
对于(var o=0;o


这里有另一种解决范围界定问题的方法;将循环体包装在一个生命中。它基本上是@sfletche的答案,但“向上”一级,不需要参数:

var a=document.getElementById(“menulinks”).getElementsByTagName(“a”);
对于(var o=0;o


它不是专门提升,而是范围界定,不是吗?来自MDN:“提升是JavaScript将声明移动到范围顶部(全局范围或当前函数范围)的行为。”在这种情况下也是如此。我想,我的反对意见可能是语义学。我可能只是不再考虑它,现在也无法解释:)类似于我对@sfletche答案的评论;如果要有一个生命来总结事情,我可能更不愿意费心传递一个参数(我觉得有点难看)。但这一切都是一样的。这不是具体的提升,而是范围界定,不是吗?来自MDN:“提升是JavaScript将声明移动到范围顶部(全局范围或当前函数范围)的行为。”在这种情况下也是如此。我想,我的反对意见可能是语义学。我可能只是不再考虑它,现在也无法解释:)类似于我对@sfletche答案的评论;如果要有一个生命来总结事情,我可能更不愿意费心传递一个参数(我觉得有点难看).但都是一样的。我的答案中的另一个选择是将循环体包装在一个IIFE中,并跳过参数传递。显然,这本质上与此相同,但我将其作为一个选择。我想最终基于函数的答案都是一样的。我确实喜欢你的答案@DaveNewton,我认为这是对我的答案的改进答案。只是给了它一个+1。我的答案中的另一个选择是将循环体包装在一个IIFE中,并跳过参数传递。显然,这本质上与此相同,但我将它作为一个选择来呈现。我想最终基于函数的答案都是相同的。我确实喜欢你的答案@DaveNewton,我认为这是对我的答案的改进回答,给它一个+1。
<div id="menulinks">
  <ul>
    <li><a href="#link1">Link 1</a></li>
    <li><a href="#link2">Link 2</a></li>
    <li><a href="#link3">Link 3</a></li>
    <li><a href="#link4">Link 4</a></li>
  </ul>
</div>
var a = document.getElementById("menulinks").getElementsByTagName("a");
for ( var o = 0; o < a.length; o++ ) {
  var clickedLink = a[o];
  clickedLink.addEventListener("click", function() {
    var b = clickedLink.getAttribute("href");
    alert(b);
  });
}
for ( var o = 0; o < a.length; o++ ) {
  var clickedLink = a[o];
  (function(clickedLink) { 
    clickedLink.addEventListener("click", function() {
      var b = clickedLink.getAttribute("href");
      alert(b);
    });
  })(clickedLink);
}
var b = clickedLink.getAttribute("href");
var b = this.getAttribute("href");
var a = document.getElementById("menulinks").getElementsByTagName("a");
var clikedLink, o;
for ( o = 0; o < a.length; o++ ) {
  clickedLink = a[o];
  clickedLink.addEventListener("click", function() {
    var b = clickedLink.getAttribute("href");
    alert(b);
  });
} 
var a = document.getElementById("menulinks").getElementsByTagName("a");
for ( var o = 0; o < a.length; o++ ) {
  a[o].addEventListener("click", function() {
    var b = this.getAttribute("href");
    alert(b);
  }.bind(a[o]));
}
var a = document.getElementById("menulinks").getElementsByTagName("a");
for ( var o = 0; o < a.length; o++ ) {
  (function(l) {
    l.addEventListener("click", function() {
    var b = l.getAttribute("href");
    alert(b);
  })(a[o]);
}