【发布时间】:2021-12-16 10:20:48
【问题描述】:
下面我有 2 个例子,唯一的区别是一个函数有参数,而另一个没有。但是示例 1 会将 hello 记录到控制台,而示例 2 会将 hello! 记录到控制台。
我的问题是为什么示例 1 记录 hello 而示例 2 记录 hello!。
示例 1,我不确定发生了什么。我的猜测是,在示例 1 中,我们使用了可变阴影。 greet 参数被初始化为原始字符串hello。 greet 参数隐藏了第 1 行中的 greet。因此,当我们将 greet 记录到控制台时,我们将在全局范围内记录 greet,hello。
我并不肯定,但在示例 2 中,函数 salutation 是使用参数 'hello' 调用的。然后将全局变量greet 重新赋值为'hello' + '!' 的值。因此,当greet 被记录到控制台时,我们记录了greet 被重新分配给的值hello!。
为什么函数中缺少greet 参数允许我们将重新分配的值记录到控制台。但是当函数有参数时,我们将全局变量记录到控制台?
示例 1.
let greet = 'hello';
function salutation(greet) {
greet = greet + '!';
}
salutation(greet);
console.log(greet); //hello
示例 2。
let greet = 'hello';
function salutation() {
greet = greet + '!';
}
salutation(greet);
console.log(greet); //'hello!'
【问题讨论】:
-
如何阅读这个答案:stackoverflow.com/a/500459/1563833
标签: javascript function scope shadowing