【块级作用域,同名函数,同名变量命名冲突的问题】

2023-11-14

块语句中的 var 和 命名式函数会进行预解析。
但块语句中的 命名式函数,不会预赋值,它会在进入块语句后迅速赋值为函数。

<script>
	var a = 1;
	{
		console.log(a); // 1
		var a = 2;
	}
	console.log(a); // 2



	var a = 1;
	{
  		console.log(a); // function() {}
  		function a() {};
	}
	console.log(a); // function() {}



	console.log(a); // undefined
	{
		function a() {};
	}



	{
		function a() {};
	}
	console.log(a); // function() {}



	var a = 1;
	{
		console.log(a); // function() {}
		a = 3;
		console.log(a); // 3
		function a() {}
	}
</script>

如果块语句中出现变量 和 函数同名时,执行语句块 最后打印的是 正常顺序赋值的 变量 结果。
但是在语句块外,打印的是 是最后一个同名函数上面的 赋值变量结果。

如果语句块中 变量 和 函数名相同时,且只有一个变量和一个函数,
函数在变量前时,最后打印的结果是函数,
变量在函数前时,最后打印的结果是变量

在块语句中,不管有几个同名函数,都会被最后一个同名函数覆盖掉。

由以上特点推断,
如果块语句中出现变量 和 函数同名时,执行语句块 最后打印的是正常顺序赋值的 变量结果。
但是在语句块外,打印的是 最后一个同名函数上面的 变量结果。会忽略掉 最后一个同名函数下面的 变量结果。

<script>
	var a = 1;
	{
		console.log(a); // function
		function a() {};
		a = 2;
	  	console.log(a); // 2
  		a = 3;
  		function a() {}
  		function a() {}
  		a = 5;
  		a = 6;
  		a = 7;
  		console.log(a); // 7
	}
	console.log(a); // 3



	var a = 1;
	{
  		function a() {};
  		a = 3;
  		console.log(a); // 3
	}
	console.log(a);  // function



	var a = 1;
	{
  		a = 3;
  		function a() {}
  		console.log(a); // 3
	}
	console.log(a); 	// 3



	var a = 1;
	{
  		a();	// cc
  		a = 1;
  		function a() {
    		console.log("aa");
		}
  		console.log(a); // 1
  		function a() {
    		console.log("bb");
  		}
  		a = 2;
  		console.log(a); // 2
  		function a() {
    		console.log("cc");
  		}
  		a = 3;
  		console.log(a); // 3
	}
	console.log(a); // 2



	var a = 1;
	if (a < 2) {
		a = 3;
  		function a() {
    		console.log("aa");
  		}
 	 	a = 2;
	}
	console.log(a);	// 3



	var a = 1;
	if (a < 2) {
  		function a() {
    		console.log("aa");
  		}
		a = 3;
 	 	a = 2;
	}
	console.log(a);	// function
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【块级作用域,同名函数,同名变量命名冲突的问题】 的相关文章

  • 从 JavaScript 加载图像

    在我的专辑幻灯片放映页面上 我有类似的代码 span style display none img src imageUrl span span show loader span in showImage 我确定图像已加载 因此我显示图像并
  • 为什么 IE9+ 上的网络浏览器不支持 document.createEvent 以及如何修复它?

    我使用的是 Windows 8 Internet Explorer 10 Visual Studio 2013 这是 JavaScript 代码 function simulate element eventName var options
  • 为什么 Jshint 在此 if 语句中说“变量已定义”?

    我有这个代码 if something is true var someVar true else var someVar false JsHint 表示在 else 语句部分 someVar 已被定义 这是为什么 我该如何解决 Thank
  • 如何使用标准 JavaScript 在 CSS 转换结束后立即重新启动它?

    我构建了一种密码生成器 只要倒计时到期 它就会显示新密码 不幸的是 我只设法弄清楚如何运行我的代码一次 倒计时由一个简单的 CSS 过渡组成 我想保留它 因为它比我的其他尝试平滑得多 其中我尝试使用 JavaScript 重复更新宽度 va
  • 使用非常大的背景位置偏移是否存在性能问题?

    我正在构建一个进度条控件 并且正在研究它实际上并不显示进度 而只是旋转 正在发生某事 的指示器的情况 我的设计基本上是交替的对角条纹 本质上是一个像这样的理发杆 但是 旋转 由于希望将尽可能多的负载转移给渲染引擎 我想为此使用 CSS 过渡
  • 如何使传单圆圈标记可拖动?

    使用传单 我创建了一个L circleMarker我希望它是可拖动的 var marker L circleMarker new L LatLng 48 94603 2 25912 draggable true bindPopup Circ
  • 在 Cordova 中合并文件的多个部分

    在我的 Cordova 应用程序中 我正在下载任意文件 例如图像或视频文件 这是通过 Cordova 文件传输插件和 Range 标头完成的 因为我需要分段下载文件 我的问题是 我想将几 个小 字节 文件合并回原来的文件中 他们曾经在其中使
  • 由于 MIME 类型而导致资源被阻止?

    多年来我已经成功地包含动态创建的 javascript 文件 这是一个例子 https granadainfo com sups php locs 95 https granadainfo com sups php locs 95 正如你所
  • Twitter Bootstrap - 下拉菜单 - 箭头键不适用于 Firefox 中的输入标签

    要求 我想在带有用户名和密码字段的下拉菜单中放置一个登录表单 我可以做到这一点 除了以下问题之外 一切正常 Issue 打字时我无法使用箭头键 上 下 firefox 当输入位于下拉代码之外时 这很有效 这适用于其他浏览器 例如 googl
  • 个人 Tumblr 帖子上的 Javascript

    我知道您可以编辑在 tumblr 博客上呈现所有帖子博客主页的 html AngularJS 但是 有什么办法可以添加自定义到各个帖子 我想在逐个帖子的基础上做一些 javascript 的东西 但似乎无法找到可以编辑代码的位置 或者 如果
  • vuejs 模板和 asp.net 部分视图,好的做法吗?

    我在网站中使用 Vue js 并将模板添加到 html 代码中 并将 js 代码添加到单个 js 文件中 所以我不想使用 vue Vuefy Browserfy 方法 而是稍后捆绑并缩小我的 js 文件 由于我必须使用 Asp Net MV
  • jquery 中可点击 div 中的按钮

    我有整个 div 您可以单击它来切换该 div 的主要部分 问题是我在该 div 中也有可点击的按钮 当我点击它时 它会执行它应该做的事情 但同时也会切换整个 div 我怎样才能禁用它 Use event stopPropagation 单
  • 如何绕过Access-Control-Allow-Origin?

    我正在一个平台上对我自己的服务器进行ajax调用 他们设置了阻止这些ajax调用的平台 但我需要它从我的服务器获取数据以显示从我的服务器数据库检索到的数据 我的 ajax 脚本正在运行 它可以将数据发送到我的服务器的 php 脚本以允许其处
  • 如何在打字稿中使用外部js

    我通过 Typescript 代码生成 Angular JS 代码 在一种情况下 我需要将外部 JS 文件添加到我的打字稿文件中 并且需要访问 js 文件中的类 我像这样添加js文件
  • 如何使用 NextJS 使用自托管字体face?

    使用 NextJS 的字体 我已经阅读了有关如何在 NextJS 中使用自托管字体的不同主题 我得到了什么 wait compiling 当我这样做时 font face font family montserrat src url myp
  • 从请求url获取hash参数

    我有这样的网址 http www coolsite com daily plan id 1 http www coolsite com daily plan id 1解析该字符串并读取哈希值 id 之后的值 的最简单方法是什么 谢谢 在客户
  • 根据文本内容从 jquery 对象中过滤元素

    我正在尝试使用contains带有 this 关键字 但它给出了错误 JS function var check ul find li filter function return this contains two css color r
  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引
  • 如何从 Cloud Functions for Firebase 文件夹读取证书文件

    我正在尝试读取 certs 文件夹下的文件 如下所示 functions certs idp public cert perm 这是我用来读取文件的代码 fs readFileSync path join dirname certs idp
  • Safari 扩展将消息发送到特定选项卡

    有没有办法从全局页面发送消息到特定选项卡 我目前正在做的是 在创建选项卡时 注入的脚本会创建一个唯一的 ID 并将包含该编号的消息发送到全局页面 并且全局页面会保存该编号 如果全局页面需要发送一些数据到一个tab 即 tab 3 然后全局页

随机推荐

  • java jinfo_JDK工具-Jinfo命令

    Jinfo是JDK自带Java配置信息工具 位于java的bin目录下 jinfo的作用是实时地查看和调整虚拟机的各项参数 虽然使用Jps命令的 v参数可以查看虚拟机启动时显示指定的参数列表 但是如果想要知道没有被明确指出的系统默认值 就需
  • linux编译安装含义,linux源码包编译安装详解

    linux下安装软件包有两种方法 源文件编译安装 source 和 rpm 安装 1 源文件包安装的通用方法 一般安装源代码的程序你得要看它的README 一般在它的目录下都有的 01 配置 构建应用的第一步就是执行configure脚本
  • OpenCV-Python实战(2)——图像与视频文件的处理

    OpenCV Python实战 2 图像与视频文件的处理 0 前言 1 图像与视频文件处理基础 2 图像的读取与写入 2 1 在 OpenCV 中读取图像 2 2 使用 OpenCV 写入图像 2 3 计算机视觉项目处理流程示例 3 读取相
  • jQuery最佳实践:如何用好jQuery

    一 用对选择器 在jQuery中 你可以用多种选择器 选择同一个网页元素 每种选择器的性能是不一样的 你应该了解它们的性能差异 1 最快的选择器 id选择器和元素标签选择器 举例来说 下面的语句性能最佳 id form 遇到这些选择器的时候
  • 2.11 PID控制算法(三)----PID结果与实际值的关联

    文章目录 1 讲解 2 举例1 3 举例2 4 举例3 5 调试PID参数 1 讲解 1 AD采样 经过PID计算的值 怎么和PWM对应起来 2 电机编码采样 经过PID计算的值 怎么与速度对应起来 这个简单 PID控制原理就是输出一个控制
  • STL详解 - 容器(03) — vector容器

    目录 第3章 vector容器 3 1 vector容器简介 3 2 vector容器函数成员 3 3 vector构造函数 3 4 vector常用赋值操作 3 5 vector大小操作 3 6 vector数据存取操作 3 7 vect
  • 解决java.lang.NoClassDefFoundError: sun/misc/BASE64Decoder错误

    问题背景 最近在项目里需要对jdbc properties文件中的明文信息进行加密 所以接触到加密解密相关的操作 在进行编码转换的过程中 遇到了BASE64Decoder错误 解决思路 使用 import org apache common
  • springboot实战---记账本项目

    项目放在了服务器上 点我访问项目 root权限账号密码 root root 普通用户账号密码 user 123456 登陆界面预览 主页面预览 只做了一个页面的增删改查 使用springboot mybatis shiro layui 我使
  • 【使用autoware中的标定工具包进行相机和激光雷达联合标定】

    使用autoware中的标定工具包进行相机和激光雷达联合标定 一 工具安装 1 catkin make Could not find the required component jsk recognition msgs 2 catkin
  • 结构方程模型-中介效应检验(Amos)

    一 中介效应含义 考虑自变量X对因变量Y的影响 如果X通过影响变量M N等其它变量而对Y产生影响 则称M N等为中介变量 下图展示了X通过M最终到Y的过程 a表示X到M的系数 b表示M到Y的系数 c表示X到Y的总效果 c 表示X到Y的直接效
  • 关于android studio 新建项目 是否勾选 use legacy android.support libraries

    android studio 新建项目 是否勾选 use legacy android support libraries 不要勾选 这个勾选后的作用是使用以前老版本的功能库 勾选后你再使用新版本的功能库就会报错 所以说不要勾选
  • vs code代码格式化配置

    安装 Prettier Code formatter 点击左下角 设置 gt 设置 gt 右上角 打开设置 按钮 gt 打开 settings json 左侧目录不折叠 explorer compactFolders false 选择格式化
  • 经常用到的linux中的命令

    1 硬盘容量 首先fdisk l看下有几个分区 然后df lh看下每个分区的剩余空间 2
  • 自动操作软件 获取软件按钮内容 UIAutomation 软件自动化测试(我的一点补充)

    近期玩了下 UIAutomation C 中有 UI Automation 库 C 可以看msdn的 Accessibility 这两个东西网上能找到的东西太少了 只能自己看微软的官方文档 我把我的一些代码段贴到下面 希望能帮助需要的人 P
  • 开发卡牌gamefi游戏需要多少钱?

    卡牌游戏作为一种受欢迎的游戏形式 吸引了众多开发者的关注 然而 开发一款成功的卡牌游戏需要全面考虑多个方面的因素 其中之一就是资金投入 本文将从专业性和投入回报的角度 探讨开发一款卡牌游戏所需的资金投入 一 专业性的重要性 1 游戏策划和设
  • Mybatis通用Mapper和自动代码生成

    一 通用Mapper配置 1 依赖jar包 tk mybatismapper3 2 0 2 Mapper需要继承 Mapper例如 import tk mybatis mapper common Mapper public interfac
  • 一夜爆红的BeReal,到底是年轻人的叛逆还是社交的新潮向?

    一款名为BeReal的社交产品 正在海外以火箭般的速度蹿红 2022年第一季度 其月活用户数暴增315 一度在美国 法国 英国 西班牙等多个地区的AppStore里排名前十 目前的累计下载量已经超过1000万 其中80 的用户年龄在16到2
  • Opencv轮廓检测

    轮廓检测 轮廓和边缘的区别 cv2 findContours img mode method 轮廓检测步骤 轮廓特征 轮廓近似 原理 轮廓的外接矩形 轮廓的外接圆 轮廓和边缘的区别 检测边缘的经典算子 sobel算子 Scharr算子 la
  • Eclipse的debug调试(快速使用)

    gt 快速使用 1 在需要程序停下来的地方双击打断点 2 使用 debug 启动 3 F6 执行下一步 4 F5 进去到方法 5 F7 跳出刚刚进入的方法 6 F8 放开这个断点 执行完整个程序 如果有下一个断点 会停在下一个断点 核心要表
  • 【块级作用域,同名函数,同名变量命名冲突的问题】

    块语句中的 var 和 命名式函数会进行预解析 但块语句中的 命名式函数 不会预赋值 它会在进入块语句后迅速赋值为函数