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

在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 function
var foo = function () {
console.log("I'm an expression");
};
这等价于:
var foo;
foo(); // 此时foo是undefined
foo = function () {
console.log("I'm an expression");
};
JavaScript中函数声明提升的顺序规则如下:
以上就是js函数声明的提升顺序的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号