JavaScript高级总结(1)

本文详细介绍了JavaScript函数的定义、表达式、构造函数、函数提升、自调用及作为值使用等概念,并探讨了函数参数的显式与隐式、值传递与对象传递。此外,还讲解了函数调用的不同方式,包括常规调用、作为方法调用、构造函数调用以及使用call()和apply()。通过对this关键字的讨论,展示了其在不同调用场景下的行为。
摘要由CSDN通过智能技术生成

一.JavaScript 函数

1.JavaScript函数的定义

JavaScript 函数是被设计为执行特定任务的代码块。

JavaScript 函数会在某代码调用它时被执行。

JavaScript 使用关键字 function 定义函数,其后是函数名和括号 ()。

函数的声明格式

function  functionname(parameters){

          执行代码

}

function--声明

functionname--函数名称

parameters-- 参数

{}--函数体

函数名可包含字母、数字、下划线和美元符号(规则与变量名相同)。

圆括号可包括由逗号分隔的参数:

(参数1,参数2,参数3,......)

由于函数声明不是一个可执行语句,所以不以分号结束。

函数可以通过声明定义,也可以是一个表达式。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>函数</title>
		<script type="text/javascript">
			//声明	函数名称 参数
			function app(a,b,c){
				return a+b*c;//执行的代码
			}
			alert(app(5,10,2));//访问函数名称,参数值
		</script>
	</head>
	<body>
	</body>
</html>

2.函数表达式

JavaScript 函数可以通过一个表达式定义。

函数表达式可以存储在变量中.

格式:var 变量名称 = function (参数1, 参数2) {执行的代码};

以上函数实际上是一个 匿名函数 (函数没有名称)。

函数存储在变量中,不需要函数名称,通常通过变量名来调用。

在函数表达式存储在变量后,变量也可作为一个函数使用.

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>函数表达式</title>
		<script type="text/javascript">
		//定义一个变量    匿名函数
			var x = function (a, b) {return a * b};//执行的代码
			var z=x(5,8)//给变量x赋值
			alert(z);//访问变量z
		</script>
	</head>
	<body>
	</body>
</html>

 3.function() 构造函数

函数可以通过关键字 function 定义。

函数同样可以通过内置的 JavaScript 函数构造器(Function())定义。

var 变量 = new Function【函数构造器】(参数1, 参数2, 执行的代码);

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>构造函数</title>
		<script type="text/javascript">
		//创建变量  声明  执行的代码
			var shao=new Function("name","age","return name+'is'+age+'years old'");
			alert(shao("xhaoshao",20));//访问
		</script>
	</head>
	<body>
	</body>
</html>

 4.函数提升(Hoisting

提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的的行为。

提升(Hoisting)应用在变量的声明与函数的声明。

因此,函数可以在声明之前调用:

格式:

var 变量=函数名称(参数1,参数2);//
            alert(变量);
            function 函数名称(参数1,参数2){  //声明
                执行的代码
            }

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>函数提升</title>
		<script type="text/javascript">
			var shao=num(10,15);//定义一个变量名称  
			alert(shao);//调用/访问
			function num(a,b){  //声明
				return a+b;//执行代码
			}
		</script>
	</head>
	<body>
	</body>
</html>

5.自调用函数

函数表达式可以 "自调用"。【自己调用自己的】

如果表达式后面紧跟 () ,则会自动调用。

不能自调用声明的函数。

通过添加括号,来说明它是一个函数表达式:

函数中的代码将在其他代码调用该函数时执行:

  • 当事件发生时(当用户点击按钮时)
  • 当 JavaScript 代码调用时
  • 自动的(自调用)
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>自调用函数</title>
		<script type="text/javascript">
			(function shao(name){//声明
				alert(name);//调用
			})("xiaoshao");
			
		</script>
	</head>
	<body>
	</body>
</html>

 6.函数可作为一个值使用

JavaScript 函数作为一个值使用。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var res1 = (function test3(name) {//声明 变量
				return "hello," + name;//执行代码
			})("zhangsan");
			alert(res1);//调用
		</script>
	</head>
	<body>
	</body>
</html>

 二.JavaScript 函数参数

函数显式参数(Parameters)与隐式参数(Arguments)

1.函数显示参数Parameters

functionName(parameter1, parameter2, parameter3) { // 要执行的代码…… }

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>显性参数</title>
		<script type="text/javascript">
			function shao(name,age) {//声明  参数
				return name+","+age;//执行代码
			}
			alert(shao("xiaoshao",20));//调用
		</script>
	</head>
	<body>
	</body>
</html>

2. 函数隐式参数Arguments

JavaScript 函数有个内置的对象 arguments 对象。

argument 对象包含了函数调用的参数数组。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>隐式参数</title>
		<script type="text/javascript">
			function shao() {//声明
				return arguments[0] + "," + arguments[1];//执行代码
			}
			alert(shao("xiaoshao", 23));//调用
		</script>
	</head>
	<body>
	</body>
</html>

 3.值传递参数

函数调用中的参数(parameter)是函数的参数(argument)。

JavaScript 参数通过传递:函数只知道值,而不是参数的位置。

如果函数改变了参数的值,它不会改变参数的原始值。

参数的改变在函数之外是不可见的。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>值传递参数</title>
		<script type="text/javascript">
			function test3(name, age) {
				return name + "," + age;
			}
			var canshu1 = "王五"; //类型string
			var canshu2 = 25; //类型number
			alert(canshu1.charAt(1)); //canshu1变量就是对象
			//var res1 = test3(canshu1, canshu2);//执行的代码
			//alert(res1);//调用
		</script>
	</head>
	<body>
	</body>
</html>

 4.参数通过对象传递

在 JavaScript 中,对象引用是值。

正因如此,对象的行为就像它们通过引用来传递:

如果函数改变了对象属性,它也改变了原始值。

对象属性的改变在函数之外是可见的。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>对象传递参数</title>
		<script type="text/javascript">
			function test3(name, age) {
				return name + "," + age;
			}
			var canshu1 = "王五"; //类型string
			var canshu2 = 25; //类型number
			//alert(canshu1.charAt(1)); //canshu1变量就是对象
			var res1 = test3(canshu1, canshu2);//执行的代码
			alert(res1);//调用
		</script>
	</head>
	<body>
	</body>
</html>

三.函数的调用 

调用 JavaScript 函数:

在函数被定义时,函数内部的代码不会执行。

在函数被调用时,函数内部的代码会被执行。

调用函数通常也可以说“启动函数”或“执行函数”。

this 关键词

在 JavaScript 中,被称为 this 的事物,指的是“拥有”当前代码的对象。

this 的值,在函数中使用时,是“拥有”该函数的对象。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>this的使用</title>
		<script type="text/javascript">
			var stu = {
				name: "zhangsan",
				testname: function() {
					alert(this.name);
				}
			};
			stu.testname();
		</script>
	</head>
	<body>
	</body>
</html>

 请注意 this 并不是变量。它属于关键词。您无法改变 this 的值。

JavaScript 函数有 4 种调用方式。

1.作为一个函数调用

调用一个函数作为一个全局函数,会导致 this 的值成为全局对象。

作为变量来使用 window 对象很容易使程序崩溃。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>函数调用</title>
		<script type="text/javascript">
			function shao(x,y,z){
				return x*y/z
			}
			var num=shao(10,20,5);
			alert(num);
		</script>
	</head>
	<body>
	</body>
</html>

  

2.函数作为方法调用

以对象方法来调用函数,会导致 this 的值成为对象本身。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>函数调用</title>
		<script type="text/javascript">
			var shao={
				x:10,
				y:20,
				z:function(){
					return this.x+this.y;
				}
			}
			var a=shao.z();
			alert(a);
		</script>
	</head>
	<body>
	</body>
</html>

 

3.使用构造函数调用函数

如果函数调用前使用了 new 关键字, 则是调用了构造函数。

这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>函数的调用</title>
		<script type="text/javascript">
			function myobj() {
				this.name = "zhangsan";
				this.age = 23;
				this.test1 = function() {
					return this.name + "-" + this.age;
				};
			}
			var obj = new myobj(); //构造函数的调用会创建一个新的对象
			//新的对象会从函数中继承属性和方法
			//alert(obj.name);
			//alert(obj.age);
			obj.name = "lisi";
			var res = obj.test1();
			alert(res);
		</script>
	</head>
	<body>
	</body>
</html>

4.作为函数方法调用函数

在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。

call() 和 apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。

call()

call() 方法是预定义的 JavaScript 方法。

它可以用来调用所有者对象作为参数的方法。

通过 call(),您能够使用属于另一个对象的方法。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>call函数的调用</title>
		<script type="text/javascript">
			function myFunction(a, b) {
				return a * b;
			}
			var myfun;
			myfun = myFunction.call(myfun, 8, 12.5);
			alert(myfun);
		</script>
	</head>
	<body>
	</body>
</html>

 apply()

apply() 方法与 call() 方法非常相似。

apply() 方法接受数组中的参数。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			function num(x, y) {
				return x / y;
			}
			var a = [525, 25];
			var shao = num.apply(this, a);
			alert(shao);
		</script>
	</head>
	<body>
	</body>
</html>

call() 和 apply() 之间的区别

不同之处是:

  • call() 方法分别接受参数。
  • apply() 方法接受数组形式的参数。
  • 如果要使用数组而不是参数列表,则 apply() 方法非常方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值