首页 > web前端 > js教程 > 为什么此 JavaScript 代码警报'1”而不是'10”?

为什么此 JavaScript 代码警报'1”而不是'10”?

Susan Sarandon
发布: 2024-12-22 04:57:09
原创
251 人浏览过

Why Does This JavaScript Code Alert

通过一个有趣的示例了解 JavaScript 提升和作用域

在最近的一篇文章中,Ben Cherry 阐明了 JavaScript 有趣的提升和作用域概念。为了说明这一点,他提供了以下代码:

var a = 1;

function b() {
    a = 10;
    return;

    function a() {}
}
b();
alert(a);
登录后复制

期望与现实

直观上,人们可能期望警报显示“10”,因为函数在 b 内声明。然而,浏览器却显示“1”。

深入研究提升和作用域

提升是一种将函数移动到其作用域顶部的现象。这意味着解释器会重写以下代码:

function b() {
  a = 10;
  return;
  function a() {}
}
登录后复制

有趣的是,JavaScript 还允许使用语法 function a() {} 在函数内声明变量。这相当于 var a = function () {};。

理解执行序列

代码的基本功能如下:

  • a 在全局范围内定义,值为 1。
  • 函数 b 被声明并且
  • 在 b 内部,使用 function a() {} 在局部作用域中声明变量 a(相当于 var a = function () {};)。这将创建 a 的单独实例。
  • a 然后在本地范围内用值 10 覆盖。
  • b 返回,并且 a 的本地实例超出范围。
  • alert(a) 访问全局变量 a,它的值仍然是 1。

因此,alert显示“1”而不是“10”,因为全局变量 a 不受函数内局部变量 a 所做的更改的影响。

以上是为什么此 JavaScript 代码警报'1”而不是'10”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板