在函数的内部,定义name变量,当i等于false时,按照Java语言,else里是拿不到name的,并且会显示报错,

但是却不会报错,这是因为javascript的变量提升机制,它会在‘**’处,定义一个变量:var name;

function aaa(i){
			// **
			if(i){
				var name = "wjdsg";
			}else{
				console.log(name);
				return null;
			}
		}
		aaa(false);	

在块中,定义变量:a,在块外面,也可以拿到a

{
	var a =1
}
	console.log(a)

        在java中,变量i是随着for循环结束而销毁,i的作用也只能在for循环中,但是在Javascript中,
在for外也可以取到值

for(var i=0;i<10;i++){
			
}
console.log(i) 

定义两个名字相同的变量也不会报错

var index = 10;
var index =	100;
console.log(index)

 解决方法,尽量不要使用:var,
使用块级声明:let和const

const:定义常量,一但被定义,一定要赋值,赋值之后,不能被修改
当用const定义对象的时候,即为常量对象,内存空间不能够覆盖,
但是却可以添加属性:person.age=12;

const person ={
	id: 1,
	name: "wjdsg"
}
		
person.id=2,
person.age=12;
console.log(person)

总结,无论是const或者let,都可以解决变量提升的问题

注:for循环不能用const,只能用var或者let

完整代码:

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>let和const</title>
</head>
<body>
	
	<script>
	/**
	 * 在函数的内部,定义name变量,当i等于false时,按照Java语言,else里是拿不到name的,并且会显示报错
	 * 但是却不会报错,这是因为javascript的变量提升机制,它会在‘**’处,定义一个变量:var name;
	 */
		function aaa(i){
			// **
			if(i){
				var name = "wjdsg";
			}else{
				console.log(name);
				return null;
			}
		}
		aaa(false);	
		
		
		/**
		 * 在块中,定义变量:a,在块外面,也可以拿到a
		 */
		{
			var a =1
		}
		console.log(a)
		
		
		/**
		 * 在java中,变量i是随着for循环结束而销毁,i的作用也只能在for循环中,但是在Javascript中,
		 * 在for外也可以取到值
		 */
		for(var i=0;i<10;i++){
			
		}
		console.log(i) 
		
		/**
		 * 定义两个名字相同的变量也不会报错
		 */
		var index = 10;
		var index =	100;
		console.log(index)
		
		/**
		 * 解决方法,尽量不要使用:var,
		 * 
		 * 使用块级声明:let和const
		 * 
		  /
		
		/**
		 * const:定义常量,一但被定义,一定要赋值,赋值之后,不能被修改
		 * 当用const定义对象的时候,即为常量对象,内存空间不能够覆盖,
		 * 但是却可以添加属性:person.age=12;
		 */  
		const person ={
			id: 1,
			name: "wjdsg"
		}
		
		person.id=2,
		person.age=12;
		console.log(person)
		
		/**
		 * 总结,无论是const或者let,都可以解决变量提升的问题
		 * 注:for循环不能用const,只能用var或者let
		 */
		
	</script>
	
</body>
</html>

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐