var,let,const三种声明方式的区别

//a. 在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量

//使用var定义
    var a = ‘hello World‘;
    function bb(){
    var a = ‘hello Bill‘;
    console.log(a); 
    }
    bb() // ‘hello Bill‘
    console.log(a); // ‘hello world‘

 

//不使用var定义

var e = ‘hello world‘;
function cc(){
e = ‘hello Bill‘;
console.log(e); // ‘hello Bill‘
}
cc() // ‘hello Bill‘
console.log(e) // ‘hello Bill‘

 

//b. 在全局作用域下,使用var定义的变量不可以delete,没有var 定义的变量可以delete.也就说明隐含全局变量严格来说不是真正的变量,而是全局对象的属性,因为属性可以通过delete删除,而变量不可以

 
var a = 100
function aa() {
    a = 10
    console.log(a)
}
aa()  

 

 
 

//c. var变量挂载window

 
var temp = 100;
console.log(temp, window.temp); // 100 100


let temp1 = 10;
console.log(temp1, window.temp1); // 10 undefined


const temp2 = 1;
console.log(temp2, window.temp2); // 1 undefined

 

//d. var变量不定义默认为undefined, 其它两个找不到

  
console.log(s); // undefined ===> a已声明还没赋值,默认得到undefined值
var a = 100;


console.log(b); // 报错:b is not defined ===> 找不到b这个变量
let b = 10;

  

//e. const,let是块级作用域

if(1){
var a = 100;
let b = 10;
}
console.log(a); // 100
console.log(b) // 报错:b is not defined ===> 找不到b这个变量


if(1){
var a = 100;
const c = 1;
}
console.log(a); // 100
console.log(c) // 报错:c is not defined ===> 找不到c这个变量

   

//f. 同一作用域,let,const不能声明同名变量,var可以

 

var a = 100;
console.log(a); // 100


var a = 10;
console.log(a); // 10



let a = 100;
let a = 10;

// 控制台报错:Identifier ‘a‘ has already been declared ===> 标识符a已经被声明了。
 

//g. const是常量,一旦声明必须赋值,不能使用null占位,声明后不能修改,如果声明是复合数据类型,可以修改其属性。

 
const a = 100;

const list = [];
list[0] = 10;
console.log(list);  // [10]


const obj = {a:100};
obj.name = ‘apple‘;
obj.a = 10000;
console.log(obj);  // {a:10000,name:‘apple‘}

 

var,let,const三种声明方式的区别

上一篇:RocketMQ:(1) NameServer、Producer


下一篇:回顾方法及加深