javascript中let和var的区别


let是es6中新增命令,也是用来声明变量的,可能很多小伙伴都像我一样,定义变量的时候都会用var而很少用到let,那么,let和var到底有什么区别呢?

let和var的区别体现在作用域上。var的作用域被规定为一个函数作用域,而let则被规定为块作用域,块作用域要比函数作用域小一些,但是如果两者既没在函数中,也没在块作用域中定义,那么两者都属于全局作用域。

全局作用域

var 和 let 声明的变量在全局作用域中被定义时,两者非常相似

JavaScript 全选
let bar = 'hehe';
var baz = 'lala'; 

但是,被let声明的变量不会作为全局对象window的属性,而被var声明的变量却可以

JavaScript 全选
console.log(window.bar);  //undefined
console.log(window.baz); // 'able'

函数作用域

var 和 let 在函数作用域中声明一个变量,两个变量的意义是相同的。

JavaScript 全选
function  aFun(){
    let bar = 'hehe'; // 函数作用域中的变量
    var baz = 'lala'; // 函数作用域中的变量
}

块作用域

在块作用域中两者的区别较为明显, let只在for()循环中可用,而 var是对于包围for循环的整个函数可用

JavaScript 全选
function  aFun1(){
    // i 对于for循环外的范围是不可见的(i is not defined)
    for(let i = 1; i<5; i++){
        //  i只有在这里是可见的
    }
    // i 对于for循环外的范围是不可见的(i is not defined)
}
function aFun2(){
    // i 对于for循环外的范围是可见的
    for(var i = 1;i<5; i++){
        // i 在for 在整个函数体内都是可见的
    }
    // i 对于for循环外的范围是可见的
}

let 和var 重新声明

var允许在同一作用域中声明同名的变量,而let不可以

JavaScript 全选
let me  = 'foo';
let me  = 'bar'; //SyntaxError: Identifier 'me' has already been declared

var me = 'foo';
var me = 'bar'; //这里me被替代了,是可以重复声明的

es6中还有一个声明变量的命令const,const和let都是在声明的块作用域中有效,但是let声明的变量可变,值和类型都可以改变,没有限制。const声明额变量不能改变,所以,const一旦声明一个变量,就必须马上初始化,不能留到以后赋值

JavaScript 全选
const hehe; //报错,Missing initializer in const declaration

const a = 3;
a = 5; //报错,Uncaught TypeError: Assignment to constant variable.

以上就是let和var在不同作用域下的区别

那么在什么情况下要用到let呢?

let 在块作用域中有效,有的时候,我们为了降低变量污染的风险,在块作用域中使用let来代替var,这样不会污染块作用域的外部作用域,降低 bug率,使代码更安全

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:C#让电脑发出声音
下一篇:vue 路由跳转的几种方式(带参数)
评论列表

发表评论

评论内容
昵称:
关联文章

javascriptletvar区别
css样式单位px,remem区别
javascript删除html字符串空行
NPM依赖说明dependenciesdevDependencies区别
C# 使用JavaScript给PDF文档设置过期时间
windows申请免费ssl证书Let's Encrypt
vue异步函数asyncawait用法
C# 执行Javascript脚本
SSL证书:Certify工具自动注册并管理免费 Let's Encrypt Https证书
ABP VNext框架Winform终端开发客户端授权信息处理
windows申请免费SSL证书-Let's Encrypt
在Winform项目Web API.NetCore项目使用Serilog 来记录日志信息
混淆工具JavaScript obfuscator中文帮助文档
浅析.netcoreConfiguration
Javascript对URL进行编码解码三种方式介绍
javascript js 操作cookie
Quartz在.NET使用
.NETCore.NET5 MVC 控制器判断是否登录
使用.NET 6开发TodoList应用(26)——实现ConfigurationOption强类型绑定
Javascript JS日期格式化显示

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码