这个全局/函数变量的范围是什么?

时间:2018-04-25 23:41:55

标签: javascript

在下面的代码中,x不应该被视为全局变量吗?因此,当它到达console.log行x时,它应该具有“World”的值。但是,当我运行此代码时,它会记录“Hello undefined”。 `

let x = "World";

function sayHello(x) {
    console.log("Hello ", x);
}

sayHello();

但是当我将参数更改为y时,它会按照我的预期工作,记录“Hello World。

let x = "World";

function sayHello(y) {
    console.log("Hello ", x);
}

sayHello();

有人能解释一下这里发生了什么吗?

感谢

2 个答案:

答案 0 :(得分:1)

x中的sayHello(x)参数会影响全局let x = "World";。如果您传入值sayHello("Hello"),则会得到一个输出Hello

答案 1 :(得分:1)

尝试拨打sayHello(‘Stack Overflow’)。我相信你能猜出结果会是什么。

该函数期望x成为传递给函数的第一个参数。如果没有传递参数,则参数xundefined

此处发生的技术术语是 shadowing 。即使没有为参数传递值,名为x的参数也会隐藏名为x的变量。