本地var不会覆盖同名参数?

时间:2017-11-27 23:45:26

标签: javascript

这让我大吃一惊:

@keyframes scale {
  0% {
    transform: scale(0);  border: 1px solid;
  }
  100% {
    transform: scale(5);  border: 5px solid;
  }
}

div#scale {
  width: 10px;
  height: 10px;

  border-radius: 50%;
  animation: scale 5s infinite;
}

我总是认为每当你声明局部变量时,之前声明的任何具有相同名称的东西都会隐藏在它后面。为什么function f(x) { var x; console.log(x); // prints 100! } f(100);不会像以前那样使var x x成为其他情况?

与此代码比较,其行为与以往一样:

undefined

2 个答案:

答案 0 :(得分:2)

var和参数都在同一函数范围内声明相同的变量x。创建变量后,它将初始化为undefined,并在分配了作为参数传递的值100后不久。

答案 1 :(得分:0)

来自MDN#var

  

<强>描述

     

...如果你重新声明一个JavaScript变量,它就不会失去它的价值。

在第一个示例中,由于x已在函数f中声明(作为参数),因此在同一函数内重新声明它(使用var)将保持相同的值在重新声明之前x(在调用时为f提供的参数)。

在第二个示例中,x在函数f中声明。因此,当查找x的值以传递给log时,我们会在x内使用f(而不是外部的undefined,因为我们没有#&# 39; t显式给它一个值(初始化它),它的值将是function show_best_matches(sequence_id, version_id) { jQuery.ajax({ type: "GET", url: 'https://unite.ut.ee/show_best_matches.php', data:{ sequence_id: sequence_id, version_id: version_id, }, success:function(html) { document.getElementById("best_matches").innerHTML = html; } }); }