Javascript 为什么将外部函数中定义的对象重新指定给外部声明的相同变量名会产生错误?

Javascript 为什么将外部函数中定义的对象重新指定给外部声明的相同变量名会产生错误?,javascript,Javascript,为什么b的typeof在下面的代码中没有定义 var b = function() {} var a = function() { var b = b console.log('typeof function_b:', typeof b) } a() 因为您正在使用声明var b初始化a函数范围内的新变量 var b在赋值之前初始化并运行(b=b),因此它将刚刚初始化的空值赋值给自己 要更改输出,只需跳过var声明和typeof b输出“函数”: 这是因为变量首先被声明(var b),然后

为什么
b
typeof
在下面的代码中没有定义

var b = function() {}

var a = function() {
var b = b
console.log('typeof function_b:', typeof b) 
}
a()

因为您正在使用声明
var b
初始化
a
函数范围内的新变量

var b
在赋值之前初始化并运行(
b=b
),因此它将刚刚初始化的空值赋值给自己

要更改输出,只需跳过
var
声明和
typeof b
输出“函数”:


这是因为变量首先被声明(
var b
),然后被赋值
b=b
。声明后,它在该范围内是
未定义的
,因此您将
未定义的
分配给它。

您可以选择dup:…现在,显然
b=b
除了将“全局”
b
分配给它自己之外,什么都不做。@RocketHazmat没错。但它是为了演示JavaScript函数中的变量作用域。
var b = function() {}

var a = function() {
    b = b;
    console.log('typeof function_b:', typeof b); // Outputs "function"
}
a();