我正在阅读这篇关于 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分配给了一个数字,然后又分配给了一个函数,但最后还是一个数字。
是否有某种规则说变量声明覆盖函数声明或者还有更多?
最佳答案
函数声明被提升到它们包含的函数的顶部(或最外层的 block )。您的较低代码等效于以下内容:
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 = 1
行之前记录 a
,您会发现它在被重新分配之前确实是一个函数:
console.log(typeof a);
var a = 1;
console.log(typeof a);
function a () {
return 1;
}
关于javascript - 函数声明以及它们如何在当前范围内创建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53245082/