let 定义的变量不会被变量提升,const 定义的常量不能被修改,let 和 const 都是块级作用域
let作用域 只在代码块中生效,代码块也就是{}之中使用
var可以跨代码块使用,也就是在代码块的内部定义的变量,外部也可以使用
{ let a=1; var b=2; } console.log(a,b);
这里会报错a is not defined 就表示了使用let声明的变量只能在代码块中使用
下面还有一个比较简单的案例
for(var i=0;i<10;i++){ } console.log(i)
控制台会显示10,局部变量泄露成为了全局变量
for(let i=0;i<10;i++){ } console.log(i)
这里的i就会报错 i is not defined
let声明的变量不会提升
console.log(c) let c=5;
以上代码运行会报错,因为变量被提升了
小结:
let是有作用域的,不能提前使用,不能重复声明
const声明的变量,一旦声明后就不可以改变,否则就会报错,const在声明的时候就需要赋值,一般定义常量用大写的字母。const也是有作用域的,只能在作用域中使用。
使用const声明的对象,可以设置对象的属性或者方法,不能重复声明对象本身
const obj={name:'peter'}; obj.name='jeery'; console.log(obj.name)
如果需要冻结对象,使对象不能被修改,可以使用obj.freeze()
Object.freeze() 方法可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。
var obj = { name:'abc', age:14, dsc:'this is aaa' } var obj_2 = obj; obj_2.age = 16; console.log(obj); //{name: "abc", age: 16, dsc: "this is aaa"} var obj_3 = Object.freeze(obj); obj_3.age = 20; obj_3.data = 'sssssssss'; console.log(obj); //{name: "abc", age: 14, dsc: "this is aaa"}
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接