JavaScript变量声明与提升

  一直以来对变量提升都是比较模糊的,今天特地看了一下这个知识点,总结一下。

  1、举个最简单的例子来说一下什么是变量提升吧。 

function foo(){console.log(x);  // undefinedvar x = 12;console.log(x)  // 12
}
foo();

  由于变量声明提升,其实上述代码相当于

function foo(){var x;console.log(x);  // undefinedx = 12;console.log(x)  // 12
}
foo();

  可以看出,变量提升其实是变量声明的提升,变量值并没有提升。

  现在将上述代码变一下。

var x = 123;
function foo(){console.log(x);  // undefinedvar x = 12;console.log(x)  // 12
}
foo();
console.log(x) // 123  这里之所以结果为123,是因为在函数内声明的变量x虽然与函数外同名,但由于是在函数内且用关键字var来声明的,所以函数内的x只是一个局部变量,函数外无法访问到

 

  2、在函数内变量声明前使用return关键字。

function too(){console.log(y+"*"); // undefined*y = 10;console.log(y+"**");  // 10**return;  // 函数内return后的语句不会执行console.log(y+"***");var y = 2;console.log(y+"****")
}
too();

  因为变量声明提升,且函数内使用了return关键字,故函数内return后面的语句并不会执行。所以上述语句相当于

function too(){var y;console.log(y+"*"); // undefined*y = 10;console.log(y+"**");  // 10**
}
too();

 

  3、控制语句内声明变量(如for循环或if语句中)

  (1)、for语句内声明变量:

for(var i=0;i<5;i++){}
console.log(i)  // 5

  运行后可以看出,for语句内声明的变量,语句外仍然可以使用。

  

  (2)、if语句内声明变量:

if(100){var x = 30;
}
console.log(x)  // 30

  运行后,可以看出,在if语句内声明的变量在if语句外仍然可以使用。

  

  (3)、在if语句内声明一个与外部同名的变量: 

var x = 123;
if(100){var x = 30;
}
console.log(x) // 30

  运行后,可以看出if语句内的变量会覆盖if语句外声明的变量。

 

  

转载于:https://www.cnblogs.com/jf-67/p/8034957.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaweb笔记1

转载于:https://www.cnblogs.com/webdev8888/p/9164291.html

重复运行JUnit测试而没有循环

最近&#xff0c;我遇到了一个问题&#xff0c;我不得不编写一种方法的测试&#xff0c;该方法需要计算在一定可能性范围内的随机分布值1 。 更准确地说&#xff0c;如果您假设签名看起来像 interface RandomRangeValueCalculator {long calculateRangeValue( long center, lo…

以太网数据帧的报尾封装字段是什么_16、90秒快速“读懂”数据包的封装、解封装...

数据转发过程概述数据包在相同网段内或不同网段之间转发所依据的原理基本一致。一、数据帧封装TCP封装(四层)当主机建立了到达目的地的TCP连接后&#xff0c;便开始对应用层数据进行封装。主机A会对待发送的应用数据首先执行加密和压缩等相关操作&#xff0c;之后进行传输层封装…

MVP模式在Android实际项目中的应用和优化

注&#xff1a;本文阅读需要对MVP模式有基本了解。 MVP模式已经出现有很长一段时间了&#xff0c;但是火起来是这两年的事情。 关于MVP的概览&#xff0c;介绍&#xff0c;乃至于教程&#xff0c;Demo&#xff0c;实例&#xff0c;网上都有很多&#xff0c;我也有一篇文章专门收…

将训练集构建成ImageNet模型

以下程序实现将训练集构建为ImageNet模型&#xff0c;训练集图片为56个民族 import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintWriter;public class createTxt {public static void createClassInd(){//56个…

CSS基本知识(慕课网)

1、注释 注解&#xff1a;CSS中注释/*这里是注释的文字*/ HTML中注释<!--这里是注释的文字--> 2、外部式css样式&#xff0c;写在单独的一个文件中 注解&#xff1a; 外部式css样式(也可称为外联式)就是把css代码写一个单独的外部文件中&#xff0c;这个css样式文件以“…

JMS和Spring:有时很重要的小事情

JmsTemplate和DefaultMessageListenerContainer是用于访问JMS兼容MOM的Spring帮助器。 他们的主要目标是在JMS API之上形成一层&#xff0c;并处理诸如事务管理/消息确认之类的基础结构&#xff0c;并隐藏JMS API的某些重复和笨拙的部分&#xff08;保留在那里&#xff1a; JMS…

python 音速_webpack多页应用架构系列(十一):预打包Dll,实现webpack音速编译

前言上文说到我们利用webpack来打包一个可配置的bootstrap&#xff0c;但文末留下一个问题&#xff1a;由于bootstrap十分庞大&#xff0c;因此每次编译都要耗费大部分的时间在打包bootstrap这一块&#xff0c;而换来的仅仅是配置的便利&#xff0c;十分不划算。我也并非是故意…

whereis 命令

可以用来查看命令的路径&#xff0c;安装在哪里 whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置 [rootsalt-server-192 a]# whereis mysql mysql: /usr/bin/mysql /usr/lib64/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz 转载于:https://ww…

css实现3D立方体旋转特效

先来看运行后出来的效果 它是在不停运行的一个立方体 先来看html部分的代码 <div class"rect-wrap"> <!--舞台元素&#xff0c;设置perspective&#xff0c;让其子元素获得透视效果。--><div class"container"> <!-- 容器&#…

Eclipse中的Tomcat:6个流行的“如何”问题

学习新技术总是一个艰难的过程。 当您尝试学习将要相互交互的两种技术时&#xff0c;此过程将变得更加困难。 Tomcat和Eclipse是Java EE开发中最流行的先决条件。 因此&#xff0c;要成为一名专业的开发人员&#xff0c;您需要知道如何使用此对执行最需要的操作以及如何进行一些…

adc分辨率和精度的区别_科普 | 传感器的灵敏度、分辨率和精度三者之间有何区别?...

传感器作为一种检测装置&#xff0c;具有微型化、数字化、智能化、多功能化、系统化、网络化的特点。在现代工业生产尤其是自动化生产过程中&#xff0c;需要各种传感器来监视和控制生产过程中的各个参数&#xff0c;使设备工作在正常状态或最佳状态&#xff0c;并使产品达到最…

Node08 - 配置模板引擎 -(route)

1、配置模板引擎 &#xff08;01&#xff09;、输出什么东西        //view engine&#xff1a;视图模板引擎(以何种方式呈现给用户) > 指定输出html           server.set(view engine, html); &#xff08;02&#xff09;、模板文件放在哪 //views: 指定好…

for循环与foreach的区别

for循环与foreach的区别 foreach 依赖 IEnumerable. 第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a, 以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束. 期间GetList()方法只执行一次. 1 2 3 4 5 6 7 8 9 10 11 12 13 fo…

SVN 定时 更新代码 Demo

1. 涉及技术&#xff1a;Winservice: 用system身份后台跑&#xff1b; Quartz&#xff1a;定时任务&#xff1b; SVN 2. 思路&#xff1a;Quartz定时调用cmd 程序,执行SVN update 命令,整个程序寄宿在Winservice3. 步骤&#xff1a;1&#xff09;service 用local system账户安…

如何在Jackson中使用PropertyNamingStrategy

Jackson api被广泛用于将json转换为Object并将Object转换为JSON。因此&#xff0c;如果您有json字符串并想在java对象中进行转换&#xff0c;请创建与json中的字段相同的bean的字段名。 Jackson在将json字段映射到java对象字段时遵循标准的bean约定&#xff0c;但是如果您有一个…

现代软件工程--阅读笔记

团队对个人的期望 &#xff08;1&#xff09;交流&#xff1a;能有效的和其他队员交流&#xff0c;从大的技术方向&#xff0c;到看似微小的问题。 &#xff08;2&#xff09;说到做到&#xff1a;“按时交付” &#xff08;3&#xff09;接受团队赋予的角色并按角色要求工作:团…

Linux上的HotSpot GC线程CPU占用空间

以下问题将测试您对Linux操作系统上运行的Java应用程序的垃圾回收和高CPU故障排除的知识。 当调查过多的GC和/或CPU利用率时&#xff0c;此故障排除技术尤其重要。 它将假定您没有访问高级监视工具的能力&#xff0c;例如Compuware dynaTrace甚至JVisualVM。 将来会介绍使用此类…

tornado-简介和原理

tornado-设计初衷 1. 追求小而精 2. epoll IO多路复用和协程 3. 支持WebSocket 4. 单线程程序(GIL限制&#xff0c;本身某种意义上不启动多进程就是单线程程序) # Python GIL介绍详情 tronado应用场景 1. 大量的http请求连接(大量的用户请求&#xff0c;要求并发性和高性能) tr…

mysql5.6.13_MySQL-5.6.13解压版(zip版)安装配置教程

1、将mysql-5.6.13-winx64.zip 解压到D:\mysql-5.6.13\目录。2、清理里面的调试文件打开这个目录&#xff0c;发现里面的文件夹和文件跟一个安装好后的MySQL基本没有区别。可能你会很郁闷&#xff0c;这个MySQL5.6.13居然有1.04GB&#xff0c;呵呵&#xff0c;仔细一看你就会发…