let 和 var

var即可用于函数外,亦可用于函数内,这就涉及到全局变量与局部变量的问题,
全局变量如何声明:
在函数外声明的变量就是全局变量,反之,在函数内声明的变量就是局部变量,
作用域:
全局变量无论在函数内,还是函数外,都可访问到;
局部变量只能在函数内有效,函数外部访问不到该变量及说对应的变量值
var声明的变量在两种情况下,是全变量:
1.直接在函数外部声明:var aa=1;
2.在函数内部不声明关键字 aa=2,即博主change()方法里的变量重新赋值

测试:
提供的函数change()方法里再太添加 var bb=33;
在该函数外面,console.log(bb);会得到undefined 

let 没有变量提升

var a = 10; // 挂在window
(function aaa(){ // 不挂在window下
	console.log(a); // undefined
	a = 5;
	console.log(a); // 5
	console.log(window.a); // 10
	var a = 20;
	console.log(a); // 20
})();


var a = 10;
function aa(){ // 挂在window下的匿名函数
	console.log(a); // undefined
	a = 5;
	console.log(a); // 5
	console.log(window.a); // 10
	var a = 20;
	console.log(a); // 20
}

aa();
let a = 10;
(function aa(){
	console.log(a);
	a = 5;
	console.log(a);
	console.log(window.a);
	let a = 20;
	console.log(a);
})()


// Uncaught SyntaxError: Identifier 'a' has already been declared
    at <anonymous>:1:1

猜你喜欢

转载自blog.csdn.net/zhan_lijian/article/details/84623608