JS中的var、let、const
1、var
在全局window中申明则为全局变量,是全局对象 window 的属性。
var sum = 0
console.log(window.sum) //
console.log(sum); //
在函数中申明的变量则为局部变量
function foo(){
function bar(a){
i = 3;
console.log( a + i ); // 3 之后是无限循环11
}
var i = 0
for( i ; i <= 10; i++){
bar( i * 2 )
}
}
foo()
这段代码可以写成这样
function foo(){
function bar(a){
i = 3;
console.log( a + i );
}
var i
i = 0
for( i ; i <= 10; i++){
bar( i * 2 )
}
}
foo()
函数提升先于变量提升,进入for循环之后把bar函数的参数为 0,所以第一次输出打印为 3,重点在这个地方 i = 3,他会现在当前作用域中寻找 i 的申明,如果没有就会沿着作用域链向上查找,在 foo 中找到了,所以 foo 中的 i 就变成了 3,在执行过 i++ 之后就得到了 i= 4,在执行bar的时候就得到了之后的 11 这样一直循环
2、let 和 const
ES6 新增的两种申明变量的方式。不允许在相同作用域内重复声明同一个变量,不存在变量提升
既然不存在变量提升,那么在变量申明之前就不能用这个变量,var 申明的变量会进行变量提升,但是值是 undefined
在ES5的时候只有函数是块级作用域,但是在ES6中就不单单只有函数作用域了,这个要归功于 let 和 const
var b = 1;
{
let b = 2;
}
console.log(b); //
花括号这一块就相当于一个块级作用域
var a = []
for(let i=0; i<10;i++){
a[i] = function(){
console.log(i);
};
console.log(i) //[function,function..] 总共10个
}
console.log(a)
a[8]() //
把这个地方的 let 改成 var 之后,会发现所有的输出都会变成 10。
var 申明的 i 其实是一个全局的变量,和数组 a 是同一个级别的。for 循环每次改变 i 的值都是在原值的基础上重新复制,等循环结束的时候 i = 10, 所以不管怎么调用输出的都是10
let 申明的 i 只在 当前这个块有效,每轮循环都有一个块,所以每次循环的时候都是新创建了一个变量 i
cont和 let 有一个不同之处,就是const 用来申明常量。一旦申明,其值就不能改变。但是如果 const 申明的是一个引用类型的值
const a = {}
a.name = 'circle'
console.log(a); // Object {name: "circle"}
const 里面保存的是这个对象的地址值,所以它只能保证这个地址值不变,而不能保证这个对象里面的属性之类的不能变
JS中的var、let、const的更多相关文章
- 【JS学习】var let const声明变量的异同点
[JS学习]var let const声明变量的异同点 前言: 本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述 ...
- js中加“var”和不加“var”的区别
JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: var x // x 为 undefined var x = 6; // x 为数字 var x = "Bill&q ...
- ES6中的var let const应如何选择
javascript世界里面的每个人都在说有关ECMAScript 6 (ES6,也称作ES 2015)的话题,对象的巨大变化 ( 类 , super() , 等), 函数 (默认参数等), 以及模块 ...
- JS中的var、let、const三者的区别
ES5:var ES6:let.const ES5中的作用域有---全局作用域.函数作用域 ES6中新增了---块级作用域(块级作用域由{}包裹,if语句.for语句中的{}也属于块 ...
- javascript中的var,let,const关键字
文章:JavaScript 中 var 和 let 和 const 关键字的区别 比较全面的文章.
- 在vue中let var 和const 区别
let和const 使用方法: (1).有没有感觉到在 javascript 使用var会发生变量提升,即脚本开始运行时, 变量已经存在了,但是没有值,所以会输出undefined. 而 ...
- ECMAScript 6中的var,let,const
var的变量提升 console.log(a); //输出undefined ; 他的实际执行顺序是: var a: console.log(a); a= 这就是var的变量提升 const命令的用法 ...
- js中的var
vars变量预解析 JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析).当你使用了一 ...
- js中加“var”和不加“var”的区别,看完觉得这么多年js白学了
Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在 ...
随机推荐
- linux 安装dubbo+zookeeper
dubbo+zookeeper 启动成功 注意:dubbo-admin-2.5.4 不支持java8
- CAD安装失败怎样卸载CAD 2019?错误提示某些产品无法安装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- genymotion安装及使用出现的问题
此处总结genymotion出现的问题. 1)安装好genymotion后,新建一个模拟器.去下载的时候报错 Unable to create Virtual Device: Connection t ...
- js获取省市
前台代码 @{ IList<Provinces> allProvinces = ViewBag.AllProvinces; IList<Districts> allDistri ...
- maven课程 项目管理利器-maven 2-2第一个maven案例hellomaven
maven 目录结构 pom.xml src -main -java -package -test -java -package -resources
- 服务器返回的14种常见HTTP状态码
当我们从客户端向服务器发送请求时 服务器向我们返回状态码 状态码就是告诉我们服务器响应的状态 通过它,我们就可以知道当前请求是成功了还是出现了什么问题 状态码是由3位数字和原因短语组成的(比如最常见的 ...
- 切片操作:MATLAB VS Python
切片操作:MATLAB VS Python 一.MATLAB 矩阵的拆分 1.冒号表达式: t = e1:e2:e3 e1表示初始值,e2为步长,e3为终止值(包括e3),产生一个从e1到e3,步长为 ...
- 数据批量删除_从页面js到后台数据库
LayUI 批量选择的 ,然后操作 batchdel: function () { var checkStatus = table.checkStatus('LAY-gridview') , ch ...
- 将 Azure SQL 内数据下载到本地,满足企业的「数据收集」
嫌长不看版 本文介绍了通过复制和导出两个操作,将 Azure SQL 数据库中的内容转移至其他位置(例如本地环境)的具体做法.借此可以帮助用户在 Azure 中运行数据库的同时,在本地或指定的其他位置 ...
- 在sql中如何把一列的值拆分成多列