在Web浏览器中使用Javascript关闭和提升时出现意外行为

时间:2016-08-05 01:39:39

标签: javascript closures hoisting

我在网页浏览器中测试闭包和吊装时发现了一个奇怪的问题。

第一次在浏览器中加载下面的页面时,会收到一条警告,上面写着“执行名字=”。单击浏览器页面会发出警告“嘿!”。这是预期的,因为只有var name_c='Joe'的声明被提升。作业留在原地。再次点击页面,你会得到“嘿Sam!”因为现在已经为封闭函数内的文本框分配了名称。这是预期的。

现在意外(至少对我来说意外):刷新页面。你会得到一个警告框,上面写着“执行名字=乔”。点击页面,你会得到“嘿乔!”。再次点击页面,你会得到“嘿Sam!”。这里发生了什么?为什么乔出现?这在Chrome和Edge中适用于我。

function name_closure(name__) {
  alert('executing name=' + name__);
  return function() {
    alert('Hey ' + name__ + '!');
    name__ = document.getElementById("txtName").value;
  };
}
document.onclick = name_closure(name);
var name = 'Joe';
<h1>Hoisting and Closures</h1>
<p>
  <input type="text" name="txtName" id="txtName" value="Sam">
</p>

0 个答案:

没有答案