举例子说明javascript的变量声明提升和函数声明提升
在 JavaScript 中,变量声明提升(Variable Declaration Hoisting)和函数声明提升(Function Declaration Hoisting)是两种重要的概念。它们都涉及到 JavaScript 的执行上下文(Execution Context)和词法环境(Lexical Environment)的创建阶段。
变量声明提升
变量声明提升指的是在 JavaScript 中,使用 var
关键字声明的变量会被提升到其所在的函数或全局作用域的顶部,但赋值操作不会被提升。这意味着,在代码中你可以在声明之前使用这些变量,但是它们的值会是 undefined
,直到执行到赋值语句。
例如:
console.log(myVar); // 输出 undefined,而不是报错,因为变量声明被提升了
var myVar = 5;
console.log(myVar); // 输出 5
然而,需要注意的是,如果使用 let
或 const
关键字声明变量,则不会发生变量声明提升,因为它们被定义在了块级作用域(Block Scope)中,而不是函数级作用域(Function Scope)或全局作用域(Global Scope)。
函数声明提升
函数声明提升指的是在 JavaScript 中,整个函数声明会被提升到其所在的函数或全局作用域的顶部。这意味着,你可以在函数声明之前调用该函数。
例如:
myFunction(); // 输出 "Hello, World!",因为函数声明被提升了
function myFunction() {
console.log("Hello, World!");
}
需要注意的是,只有使用 function
关键字进行的函数声明会被提升,而函数表达式(例如,将函数赋值给变量的方式)则不会被提升。
例如:
myFunction(); // 报错:TypeError: myFunction is not a function
var myFunction = function() {
console.log("Hello, World!");
};
在这个例子中,myFunction
是一个函数表达式,而不是一个函数声明,所以不会发生函数声明提升。因此,在 myFunction
被赋值之前尝试调用它会导致一个错误。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律