javascript中的函数

1.js中的函数

在js中声明一个函数需要使用到function关键字

function fun(){
	var result = 0;
	return result;
}

在js中,函数如果没有显式的返回值的话,默认其返回值为undefined。
需要注意的是,一个函数只能有一个返回值,如果需要多个返回值的话,可以考虑将结果存放在一个数组中,返回这个数组即可。

2.参数

js中函数可以有参,也可以无参。
定义一个两数相加的函数:

function sum(a, b){
	var c = a + b;
	return c;
}

与其他语言不一样,js是一种弱类型的编程语言,所以在形参部分,只需要声明变量名就可以,不能指定变量类型,如果使用java语言来写这个函数,就会是:

sum(int a, int b){
	int c = a + b;
	return c;
}

如果声明了一个有参的函数,在调用这个函数的时候,将参数值传入。如果调用有参函数时没有传入参数,那么就会默认对应的参数为undefined。

function sum(a, b){
	var c = a + b;
	return c;
}
sum(1, 2)
>3

在这里插入图片描述

function sum(a, b){
	var c = a + b;
	return c;
}
sum(1)
>NaN

在这里插入图片描述
这就是一个调用有参函数没有传参的情况,参数b为undefined,与a=1相加之后,就会是数字NaN。

3.arguments变量

arguments变量是内建变量,在每个函数中都能够调用,它返回的是函数所接收的所有参数。

function sum(a, b){
	return arguments;
}

调用sum函数,实际传入4个变量,那么函数返回的arguments就是这4个变量。
在这里插入图片描述
使用arguments,就可以将上面的sum函数改造成能够接收任意长度参数的一个函数。

function sum(){
	var result = 0,i = 0;
	for(i; i < arguments.length;i++){
		result += arguments[i];
	}
	return result;
}

在这里插入图片描述

4.变量的作用域

与其他与语言不同,js中变量不是以代码块作为作用域的,而是以函数作为作用域的。
如何理解:
如果在一个函数中某处定义了一个变量,那么只能在这个函数中访问到该变量,在这个函数之外的地方,这个变量是不可见的。
在这个函数中定义a = 1,并将其在提示框中弹出。

function fun(){	
	var a  = 1;
	alert(a);
}

在这里插入图片描述
接下来,尝试在函数体之外访问这个变量:
在这里插入图片描述
运行出错,提示没有定义过这个变量。

此外,当在函数中声明一个变量时如果没有用var声明,该变量就默认为全局变量(定义在所有函数之外的变量)

看一个例子:

function fun(){
	local = 1;
}

在这里插入图片描述
看到,当函数被定义后,调用local变量会报错,当调用完函数后再调用变量,它的值就打印出来了。

原因是,这个变量在函数被调用之前是不存在的。该变量会在函数首次被调用时被赋予全局作用域。

5.变量提升

先看一段代码:

var a = 123;
function fun(){
	alert(a);
	var a = 1;
	alert(a);
}
>fun()

第一次显示:
在这里插入图片描述
第二次显示:
在这里插入图片描述
这是什么原因:
原因是函数域始终高于全局域,其中在函数域中 var a = 1会覆盖所有与他同名的变量值。至于第一条alert(a),对于函数域来说,该变量在函数调用时就已经存在于本地空间了,但由于没有被定义,值就是undefined。这种现象就叫做变量提升。

此外,如果此时在调用函数之后再次打印a,可以看到,a 的值是123,也就是全局域的值。

对于变量提升,当程序执行到新的函数时,这个函数内部所声明的全部变量都会被提升到函数最开始的地方。同时,被提升的也只有变量的声明,也就是说,相关的复制操作并不会被提升,该在什么时刻赋值还在什么时刻赋值。结合上面的例子,a这个变量被提升了,但a = 1并没有被提升,所以第一个alert(a)显示就是undefined,这一行执行完后才复制,所以第二个alert(a)就是1了。

6.匿名函数

在js中,函数可以是匿名的,例如:

var result  = function(a, b){
	return a + b;
}

这种形式的函数也是被允许的,称作匿名函数。
在这里插入图片描述

可以这样使用。
原因是,函数也是数据,用result接收了这个函数,此时result的类型就是函数。

7.内部函数与返回函数的函数

与其他语言类似,js中函数体中也可以再声明一个新的函数,叫做内部函数。

var f = function (a){
	var f2 = function (b){	
	     b = 4;
		return b;
	}
	return a + f2(a);
}
}

在这里插入图片描述
同样的,内部函数作为函数的一个成员,也是局部变量,出了这个函数就访问不到了。

既然每个函数都有返回值(显示返回或undefined),那么返回值也可以是一个函数。

 function a(){	
	alert(1);
	return function(){
		alert(2);
	};
}

在这里插入图片描述执行var f = a()的时候1会弹出来;
执行f()的时候2会弹出来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值