我有一个名为foo的变量和名为foo的函数.
//variable followed by function declaration
var foo="bar";
function foo(){
return "bar";
}
//function declaration followed by variable
function foo(){
return "bar";
}
var foo="bar";
//When I call foo it returns string bar;
//When I enquired foo() it throws error
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?为什么变量名覆盖函数声明?
Tus*_*har 15
当我调用
foo它时返回字符串bar;
函数声明被提升到其范围的顶部.编译器将函数定义移到上面.然后变量被覆盖到字符串.
代码相当于
function foo() {
return "bar";
}
// Overwriting the value
var foo = "bar"
Run Code Online (Sandbox Code Playgroud)
因此,在这两种情况下,输出都是'bar'.
请注意,函数表达式不会被挂起.
有关函数提升的更多信息,请参阅Javascript函数范围和提升
当我询问
foo()它时undefined
foo这里不是函数,它是一个字符串.所以,foo()会抛出一个错误
未捕获的TypeError:a不是函数(...)