javascript基础(函数与方法的区别,变量作用域,变量和函数的声明提前,函数作用域)(十五)

1.函数与方法的区别:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			/*
			 * 方法(method)
			 */
			
			//创建一个对象
			var obj = {name:"孙悟空",age:18};
			
			//对象的属性也可以是对象
			obj.brother = {name:"猪八戒",age:28};
			
			//console.log(obj.brother.name);
			
			//对象的属性也可以是一个函数
			//当一个对象的属性是一个函数时,我们称这个函数是这个对象的方法
			//函数和方法只是称呼上的不同,本质上没有区别
			obj.sayName = function(){
				console.log("Hello 大家好 我是孙悟空~~~");
			};
			
			//console.log(obj.sayName);
			
			//当我们调用对象中的函数时,我们称我们在调用对象的方法
			//obj.sayName();
			
			var obj2 = {
				
						name:"沙和尚",
						age:38,
						sayName:function(){
							console.log("我是老沙~~~");
						}
			}
			
			obj2.sayName();
			
		</script>
	</head>
	<body>
	</body>
</html>

2.变量作用域:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			/*
			 * 作用域(Scope)
			 * 	- 作用域简单来说就是指一个变量的作用的范围
			 * 	- 在JS中作用域分成两种:
			 * 		1.全局作用域
			 * 		2.函数作用域
			 * 
			 * 	- 全局作用域:
			 * 		1.所有直接在script标签中编写的代码都在全局作用域中
			 * 		2.全局作用域在打开网页时创建,在网页关闭时销毁
			 * 		3.全局作用域中有一个全局对象window,
			 * 			window代表的是浏览器的窗口,
			 * 			在全局作用域中创建的变量都会作为window对象的属性保存
			 * 			在全局作用域中创建的函数都会作为window对象的方法保存
			 * 		4.在全局作用域中创建的变量都是全局变量,可以在页面的任意位置访问
			 */
			
			var a = 123;
			var b = 456;
			
			//console.log(window.b);
			//console.log(window.c);
			
			function fun(){
				console.log(b);
				console.log("我是全局中的函数fun。。。。");
			}
			
			fun();
			
			//window.fun();
			
			//window.alert("hello");
			
			
			
		</script>
	</head>
	<body>
	</body>
</html>


3.变量和函数的声明提前:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
		
			
			//如果不写var,直接为变量赋值,则相当于为window对象添加属性
			//window.a = 10;
			//a = 10;
			
			/*
			 * 变量的声明提前
			 * 	- 使用var关键字声明的变量,都会在所有的代码执行之前被声明,但是不会赋值
			 * 		赋值会直到执行到赋值的代码时才执行
			 * 	- 如果不适用var关键字声明变量,则不会有声明提前的特性
			 * 
			 * 函数的声明提前
			 * 	- 使用函数声明创建的函数,会在所有的代码执行之前创建,
			 * 		所以我们可以在函数声明前就去调用函数
			 * 	- 使用函数表达式创建的函数,没有这个特性,所以不能在它创建之前调用
			 */
			//console.log("a = "+a);
			
			var a = 10;
			
			//fun();
			//console.log(fun2);
			
			//使用函数声明来创建一个函数
			function fun(){
				console.log("我是fun函数。。。。");
			}
			
			//使用函数表达式创建一个函数
			var fun2 = function(){
				console.log("----->我是fun2.。。。");
			};
			
			
			
		</script>
	</head>
	<body>
	</body>
</html>

4.函数的作用域:

(一)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			/*
			 * 函数作用域
			 * 	- 函数作用域可以理解为是全局中的小的作用域
			 * 	- 函数作用域在函数调用时创建,在调用结束时销毁
			 * 		每调用一次函数就会创建一个新的函数作用域
			 * 	- 在函数作用域中可以访问到全局变量,
			 * 		而在全局中无法访问到函数作用域中的变量
			 * 		在函数中创建的变量如果不写var,则会变成全局变量
			 * 	- 当我们在函数中使用一个变量时,它会先在自身的作用域中寻找,
			 * 		如果有就直接使用,如果没有则去上一级作用域中寻找,
			 * 		找到则使用,没找到则继续寻找,直到找到全局作用域为止
			 * 		如果全局作用域中依然没有,则报错ReferenceError
			 *  - 在函数作用域中也适用变量和函数的声明提前
			 * 	
			 */
			
			//创建一个全局变量a
			var a = "全局中的a";
			
			function fun(){
				//console.log(a);
				//window.b = ...
				var b = "---> 函数作用域中的b";
				
				//console.log(b);
			}
			
			//fun();
			
			//console.log(b);
			
			//创建全局变量c
			//var c = "全局c";
			
			/*function fun2(){
				
				//创建一个局部变量c
				var c = "---> 函数中的c";
				
				console.log(c);
				
			}
			
			fun2();*/
			
			function fun3(){
				
				//var c = "fun3中的c";
				
				function fun4(){
					
					//var c = "fun4中的c";
					
					console.log(c);
				}
				
				//调用fun4
				fun4();
				
			}
			
			//fun3();
			
			
			
			
		</script>
	</head>
	<body>
	</body>
</html>
(二)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			
			var a = "全局a";
			
			function fun(){
				var a = "--> 函数a";
				
				//如果在函数作用域中想访问全局变量可以通过window对象来访问
				console.log(window.a);
			}
			
			//fun();
			
			a = 20;
			
			/*
			 * 在函数内部使用var关键字声明的变量也会被声明提前,
			 * 	它的声明会在所有的代码执行前执行
			 * 
			 * 在函数内部使用函数声明创建的函数,也会在所有的代码执行之前被创建
			 */
			function fun2(){
				
				fun3();
				
				//console.log(a);
				
				//var a = 10;
				
				function fun3(){
					console.log("我是fun2内部的函数。。。");
				}
				
				
			}
			
			fun2();
			
		</script>
	</head>
	<body>
	</body>
</html>

练习:

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			/*var a = 10;
									
									function fun(){
										
										a = 5;
										
									}
									
									fun();
									
									console.log(a);*/

			var a = 123;

			/*
			 * 定义形参就相当于在函数中声明了对应的变量
			 */
			
			
			/*function fun(a) {
				alert(a);
				a = 456;
			}

			fun(); //undefined

			alert(a); //123*/

			var a = 123;

			function fun(a) {
				alert(a);
				a = 456;
			}
			
			fun(123); //123
			
			alert(a); //123
		</script>
	</head>

	<body>
	</body>

</html>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鸭蛋炒饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值