1.var存在变量提升且声明的变量会挂载在window上,let和const不存在变量提升;
console.log(c); var c = 'c';//undefined(会进行c的提前解析,再执行。var默认为undefined,只有赋值才会变成对应的值); let c = 'c';//let不存在变量提升,不会进行域解析;
var a = 100; console.log(a,window.a);//100,100 let a=100; console.log(a,window.a);//100 undefined const a =100; console.log(a,window.a);//100 undefined
var d = 1; var d =100; console.log(d);//100 let e = 1; let e = 100; console.log(e);//报错has already been declared;
let e = 1; e = 100; console.log(e);//100,不可以重复定义,但能改变值
3.有严格的作用域 (var函数作用域,let块级作用域)
// var 在当前函数作用域中可拿到值,函数外不行 function fun(){ var n = 10; if(true){ var n =100; } console.log(n); }; fun()//100; // let function fun(){ let n = 10; if(true){ let n =100; } console.log(n); }; fun()//10,n=10作用在函数中,n=100作用在if判断中,作用域不同。
4.const 声明一个只读的常量,一旦声明,常量的值就不能改变;(与var对应的区别同let)
const m = 100; m=200; console.log(m);//error const r;//error 一旦声明就要赋值,不能只声明不赋值;
const obj = {}; obj.name ="baby"; console.log(obj);//{name:"baby"}复杂数据类型的值可以改变,内存地址不可以改变,地址内的值可以改变; const arr =[]; arr.push(1);//1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。