Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

js变量提升 #62

Open
artdong opened this issue Jul 9, 2020 · 1 comment
Open

js变量提升 #62

artdong opened this issue Jul 9, 2020 · 1 comment
Labels
js javascript

Comments

@artdong
Copy link
Collaborator

artdong commented Jul 9, 2020

请写出一下代码运行结果

console.log(a);
var a = 1;
console.log(a);
function a() {}
console.log(a);
@artdong artdong added the js javascript label Jul 9, 2020
@artdong
Copy link
Collaborator Author

artdong commented Nov 15, 2023

在JavaScript中,变量和函数声明会在代码执行之前被提升到其所在作用域的顶部。但是,这种提升只涉及到声明部分,而不包括赋值。

让我们针对你的例子重新解释:

console.log(a); // 输出:function a() {}
var a = 1;
console.log(a); // 输出:1
function a() {}
console.log(a); // 输出:1
  1. 变量和函数声明提升:

    • 变量 a 和函数 a 都被提升到作用域的顶部。在提升阶段,函数声明会覆盖变量声明。
  2. 代码执行:

    • 第一个 console.log(a); 遇到的是函数声明,因为在提升阶段,函数声明覆盖了变量声明。所以输出 function a() {}

    • var a = 1; 这一行的赋值部分不会影响提升阶段的输出。在提升阶段,a 被视为函数。

    • 第二个 console.log(a); 输出的是变量 a 的值,因为在这一行之前,变量 a 已经被重新赋值为 1。所以输出 1

    • 第三个 console.log(a); 输出的仍然是变量 a 的值,即 1

总体来说,提升阶段会将声明提升到作用域的顶部,函数声明会覆盖变量声明,但赋值部分不会在提升阶段执行。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js javascript
Projects
None yet
Development

No branches or pull requests

1 participant