当前位置: 首页 > news >正文

块级作用域绑定

文章目录

    • 1.var声明和变量提升
    • 2.块级声明和临时死区
    • 3.禁止重复声明
    • 4.块级作用域绑定的最佳实践

1.var声明和变量提升

无论是在函数作用域亦或是全局作用中使用var声明的变量,都会在预编译阶段被提升到当前作用域的顶部。

function func(condition) {
	if(condition){
    var value = "value";
    return value;
  } else {
    //此处可访问到value,但值为undefined
    return null;
  }
  //此处可访问到value,但值为undefined
}

通常在拥有块级作用域的语言中,上述代码块只会在当参数condition的值为true时,value变量才会被创建,且只能在if代码块中被访问到。但在js中,无论condition的值是什么,value变量都会被创建,它再预编译阶段中的实际表现如下:

function func(condition) {
  var value;
	if(condition){
    var value = "value";
    return value;
  } else {
    return null;
  }
}

2.块级声明和临时死区

块级声明会将当前声明变量的作用域限制在函数作用域或块级作用域内部,其他非作用区域访问会得到undefined。

function func(condition) {
	if(condition){
    let value = "value";
    return value;
  } else {
    //此处访问value会报错
    return null;
  }
  //此处访问value会报错
}

使用let或const的声明的变量会在预编译阶段被加入到临时性死区(TDZ)中,访问临时性死区中的变量会触发引用错误。

3.禁止重复声明

使用var声明同名变量时,不会产生任何问题,因为它只是相当于一个赋值操作。

function(condition) {
	var value = "value";
  var value = "val";
  //相当于
  var value = "value";
  value = "val";
}

但使用let和const声明变量时,会禁止声明同名变量,抛出变量已定义异常。

4.块级作用域绑定的最佳实践

变量定义默认使用const,只有确实需要改变变量的值时使用let。

相关文章:

  • 8.7 迁移学习域适应
  • 高企认定评分标准有哪些?
  • halcon提取数据集中指定图片并进行裁剪
  • 使用PdfSharp从模板生成Pdf文件
  • HTML篇三——(2)
  • 【012】基于JavaWeb酒店客房管理系统(附源码、数据库、数据库文档、运行教程)
  • Gitee账号注册以及Git下载安装
  • 边学边记——Java中有关接口的知识
  • ant-design-vue 库 Loading 组件封装
  • 2022 年前端趋势的 技术发展情况
  • Observability:使用 Elastic Agent 来收集定制的 TCP 日志
  • 【C++】C++ 入门
  • Flink Kafka Sink 源码分析
  • 高斯消元法(2)——保姆级笔记
  • R语言因子分析全流程
  • [译]如何构建服务器端web组件,为何要构建?
  • Apache Zeppelin在Apache Trafodion上的可视化
  • CEF与代理
  • JavaScript函数式编程(一)
  • jQuery(一)
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • MaxCompute访问TableStore(OTS) 数据
  • MD5加密原理解析及OC版原理实现
  • python_bomb----数据类型总结
  • React-flux杂记
  • 从零搭建Koa2 Server
  • 简单基于spring的redis配置(单机和集群模式)
  • 盘点那些不知名却常用的 Git 操作
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端面试之CSS3新特性
  • 什么是Javascript函数节流?
  • 提醒我喝水chrome插件开发指南
  • 通过npm或yarn自动生成vue组件
  • 走向全栈之MongoDB的使用
  • 白色的风信子
  • 容器镜像
  • ​2021半年盘点,不想你错过的重磅新书
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #Linux(权限管理)
  • (8)STL算法之替换
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (转)linux 命令大全
  • .apk 成为历史!
  • .Net Remoting常用部署结构
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET框架设计—常被忽视的C#设计技巧
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET下ASPX编程的几个小问题
  • @EnableWebMvc介绍和使用详细demo
  • [2]十道算法题【Java实现】
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C#]winform部署PaddleOCRV3推理模型
  • [C++]打开新世界的大门之C++入门