函数声明优先提升且覆盖同名变量,多个同名函数后者覆盖前者,函数表达式仅变量提升。

在JavaScript中,函数声明的提升(hoisting)是指函数声明会在代码执行前被“提升”到当前作用域的顶部。理解函数声明的提升顺序,有助于避免运行时错误和意料之外的行为。
函数声明优先于变量声明提升
在同一个作用域中,函数声明会被优先提升,并且优先级高于变量声明。这意味着:
函数声明会完整地被提升到作用域顶部。 变量声明也会被提升,但不会赋值(初始化留在原地)。 如果函数和变量同名,函数声明会先被提升并覆盖变量声明(在提升阶段)。示例:
console.log(typeof foo); // "function"foo(); // 能正常执行var foo = "hello";function foo() { console.log("I am a function");}
上面代码实际执行时等价于:
function foo() { console.log("I am a function");}// var foo; (声明被提升,但赋值不提升)console.log(typeof foo); // "function"foo(); // 正常调用foo = "hello"; // 此处才是赋值
多个函数声明同名时,后声明的覆盖前面的
当存在多个同名函数声明时,提升过程中后面的函数会覆盖前面的:
foo(); // 输出 "later"function foo() { console.log("earlier");}function foo() { console.log("later");}
因为两个函数都会被提升,但第二个函数声明会覆盖第一个。
函数表达式不会完全提升
注意:只有函数声明会被完整提升,函数表达式(尤其是匿名函数赋值给变量)只提升变量名,不提升函数体:
foo(); // 报错:foo is not a functionvar foo = function () { console.log("I'm an expression");};
这等价于:
var foo;foo(); // 此时foo是undefinedfoo = function () { console.log("I'm an expression");};
总结:
JavaScript中函数声明提升的顺序规则如下:
所有函数声明优先被提升到作用域顶部。 同名函数声明中,后面的覆盖前面的。 变量声明也提升,但不会影响已提升的函数(除非后续赋值覆盖)。 函数表达式遵循变量提升规则,函数体不会提升。基本上就这些。
以上就是js函数声明的提升顺序的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1538261.html
微信扫一扫
支付宝扫一扫