我正在阅读有关js函数的这篇文章。 https://dmitripavlutin.com/6-ways-to-declare-javascript-functions/
它说:“函数声明在当前范围内创建一个变量,其标识符等于函数名称。该变量保存函数对象。”
所以我做了一些实验以了解更多信息。
function a () {
return 1;
}
console.log(typeof a === "function")
console.log(typeof a === "number")
此输出
是的
错误
这并不奇怪,然后当我运行它时。
var a = 1;
function a () {
return 1;
}
console.log(typeof a === "function")
console.log(typeof a === "number")
输出为
错误
是
因此,尽管将a分配给一个数字,然后再分配给一个函数,但最后还是一个数字。
是否存在某种规则说变量声明会覆盖函数声明,或者还有更多规则?
答案 0 :(得分:2)
函数声明被提升到其包含函数(或最外面的块)的顶部。您的下部代码等效于以下代码:
var a = function a () {
return 1;
}
// next line reassigns `a` to number:
a = 1;
console.log(typeof a === "function")
console.log(typeof a === "number")
如果您在行a
之前登录a = 1
,则会在重新分配它之前看到它确实是一个函数:
console.log(typeof a);
var a = 1;
console.log(typeof a);
function a () {
return 1;
}