JavaScript中全局变量和局部变量以及var关键字的有趣案例(变量提升/变量前置)

JavaScript中undefined和is not defined异常 

不解释,直接看代码

<script type="text/javascript">
function f() {
	console.log(userName);  //undefined
	//局部变量(在函数内,使用var关键字声明的变量是局部变量)
	var userName = '陈宇寒'; //userName是局部变量
}
f();


// var str2 = "于都县";
//上面那一行代码注释掉就会报错str2 is not defined,上面那一行代码不注释掉就会打印于都县
// console.log(str2);

console.log(str1); //undefined
//变量提升/变量前置(变量的声明会自动前置,变量的赋值还是留在原来的位置上)
var str1 = "赣南脐橙";

function t1() {
// 	console.log("-----" + str2);  //str2 is not defined
//全局变量(在函数内,没有使用var关键字声明的变量是全局变量)
	str2 = '江西赣州于都县'; //str2是全局变量
	console.log("#####" + str2); //#####江西赣州于都县
	console.log("!!!!!" + window.str2); //!!!!!江西赣州于都县
}
t1();
console.log("*****" + str2); //*****江西赣州于都县
console.log("=====" + window.str2); //=====江西赣州于都县


function hi() {
//在函数内,凡是没有使用var关键字声明的变量,最终都会成为全局对象window的属性
	money = 666; //在函数内,凡是没有使用var关键字声明的变量,该变量最终都会成为全局变量
	console.log(money); //666
	console.log(window.money); //666
}
hi();
console.log(money); //666
console.log(window.money); //666
</script>

运行结果如下:

以后有时间我再详细的讲讲JavaScript中的变量提升/变量前置。

猜你喜欢

转载自blog.csdn.net/czh500/article/details/114451625