我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何提升全局变量var

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何提升全局变量var

这篇文章主要讲解了“如何提升全局变量var”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何提升全局变量var”吧!

一、提升全局变量 var

var tmp = new Date();  function f() {     console.log(tmp);     if (false) {         var tmp = "hello";     } } f();

JS新手往往会以为将正常打印出日期,而实际输出的确是`undefined`!

> var tmp = new Date(); > function f() { ...     console.log(tmp); ...     if (false) { .....         var tmp = "hello"; .....     } ... } > f(); undefined

这是因为在函数f()的内部,var被提升到定义域的顶部,实际执行为:

var tmp = new Date();  function f() {     var tmp;// 提升到这里,将全局的tmp覆盖了。var默认赋值为undefined     console.log(tmp);     if (false) {         var tmp = "hello";     } } f();

也就是说var不仅提升,而且将tmp初始化赋值为undefined。

二、如何才能正常输入日期呢?

解决方案是将global-scope的var替换为block-scope的let:

var tmp = new Date();  function f() {     //var tmp;// 提升到这里,将全局的tmp覆盖了。var默认赋值为undefined     console.log(tmp);     if (false) {         let tmp = "hello";     } } f(); // 2021-04-02T10:52:30.983Z

这是因为let定义的是local-variable.

三、TDZ临时DeadZones

更加诡异的案例,来单独看let:

var tmp = new Date();  function f() {     console.log(tmp);     let tmp = "hello";  } f();

你原以为将会如常打印出时间,但却报错tmp未定义。

ReferenceError: Cannot access 'tmp' before initialization

这是因为 tmp 被提升,其实际执行为:

var tmp = new Date();  function f() {     let tmp; // 提升在这里     console.log(tmp);     let tmp = "hello";  } f();

然而区别于var的是,tmp仅仅被提升,却不会被自动赋值为undefined,因此会报错`ReferenceError`.

该问题就是传说中的TDZ (temporal dead zone)。解决方案也简单,就是将所有的let或者const等全部都写到最上面。

感谢各位的阅读,以上就是“如何提升全局变量var”的内容了,经过本文的学习后,相信大家对如何提升全局变量var这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何提升全局变量var

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

var在for循环变量泄漏为全局变量怎么解决

这篇文章主要介绍“var在for循环变量泄漏为全局变量怎么解决”,在日常操作中,相信很多人在var在for循环变量泄漏为全局变量怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”var在for循环变量泄漏
2023-06-20

Vue全局变量和局部变量如何实现

这篇文章主要介绍“Vue全局变量和局部变量如何实现”,在日常操作中,相信很多人在Vue全局变量和局部变量如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue全局变量和局部变量如何实现”的疑惑有所帮助!
2023-07-04

android如何定义全局变量

在Android中,可以通过以下几种方式定义全局变量:1. 使用静态变量:在一个类中定义一个静态变量,并在需要使用的地方引用该变量。静态变量的生命周期与应用程序的生命周期相同,可以在整个应用程序中访问。例如,在一个名为MyApplicati
2023-08-11

python如何定义全局变量

在Python中,可以使用全局变量来在整个程序中共享数据。以下是定义全局变量的几种方法:1. 在函数外部定义全局变量:```pythonglobal_var = 10```2. 在函数内部使用 `global` 关键字声明全局变量:```p
2023-08-12

eclipse如何搜索全局变量

要在Eclipse中搜索全局变量,可以按照以下步骤进行:1. 打开Eclipse并进入要搜索的项目。2. 在Eclipse的菜单栏中,选择"Search"(搜索)选项。3. 在下拉菜单中,选择"File"(文件)。4. 在弹出的搜索框中,点
2023-09-07

java如何定义全局变量

在Java中,可以使用以下两种方式定义全局变量:1. 在类中定义静态变量:静态变量属于类,而不是属于类的实例对象。可以通过类名直接访问静态变量,而不需要创建类的实例对象。可以使用`static`关键字来定义静态变量。```javapubli
2023-08-29

python全局变量如何定义

在Python中,全局变量可以在函数外部的任意位置定义。在函数内部使用全局变量时,需要使用global关键字声明变量为全局变量。以下是一个示例:# 定义全局变量global_var = 10def my_function():# 使用全
python全局变量如何定义
2024-02-29

Python中如何定义全局变量

今天就跟大家聊聊有关Python中如何定义全局变量,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 声明法该方法是直接在当前模块中进行全局变量定义声明,使用global的声明方式,
2023-06-04

Oracle中如何声明全局变量

在Oracle中,可以使用包(package)来声明全局变量。首先创建一个包,然后在包的声明部分声明全局变量,可以在包的任何过程或函数中使用这些全局变量。以下是一个简单的示例:CREATE OR REPLACE PACKAGE glob
Oracle中如何声明全局变量
2024-08-23

编程热搜

目录