//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‘}