举例子说明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

然而,需要注意的是,如果使用 letconst 关键字声明变量,则不会发生变量声明提升,因为它们被定义在了块级作用域(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 被赋值之前尝试调用它会导致一个错误。

posted @   王铁柱6  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示