问题描述
function y() {
var x = 'hi';
function x() {
return 'bye';
};
return x(); // x is not a function
return x; // 'hi'
}
console.log(y())
无法执行此函数。谁能解释一下?
解决方法
函数和变量声明被提升。函数声明也提升了值的赋值。
因此 function x
和 var x
在当前作用域中都创建了一个名为 x
的变量。 function x
还为该变量分配了一个函数。
带有 =
的作业不会被提升。
所以 x = 'hi'
用字符串覆盖该函数。