1、函数的返回值
当函数执行完的时候,并不是所有的时候都要把结果打印。我们期望函数给我们一些反馈(比如计算的结果返回进行后续的运算),这个时候可以让函数返回一些东西,也就是返回值,函数通过return返回一个值
语法:
function f(形参,形参){
代码
return 返回值
}
var re = f(实参1,实参2);
正常声明调用函数,然后加一个 return 后面跟你要的返回值
下面要定义一个变量去接一下返回的值,返回值是什么,定义的 re 就是什么 ,这就是返回值的语法
下面我们尝试一下:
<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<body>
</body>
<script>
function f(a,b){
var c = a-b;
return c;
}
var h = f(5,2);
console.log(h)
</script>
</html>
看结果:
... ...
function f(a,b){
var c = a-b;
return c;
}
f(5,2);
</script>
</html>
那么如果不去接返回值的话,就是什么都没有的
前面我们说了,你有返回值,返回值是什么,下面的变量就是什么,那我们在看,如果不返回的话,会是什么结果的,:
... ...
function f(a,b){
var c = a-b;
// return c;
}
var h = f(5,2);
console.log(h)
</script>
</html>
如果函数中没有return,那么函数调用之后返回值值的就是undefined
那么我们有return,但是没有值,会怎么样:
... ...
function f(a,b){
var c = a-b;
return ;
}
var h = f(5,2);
console.log(h)
</script>
</html>
结果依然是undefined
接着我们看一下别的情况:
... ...
function f(a,b){
var c = a-b;
return c;
console.log(444);
}
var h = f(5,2);
console.log(h)
</script>
</html>
这次我们在return下面加一个console.log,打印一个值,看结果:
可以看到,是没有的
注意:
函数中 return 的后面,不管有什么代码,均不执行;return后函数的调用结束
2、匿名函数与自调用函数
匿名函数,函数本身是没有名字的
那么什么是匿名函数呢,其实在之前就用过了
... ...
<script>
var fun = function(){
}
</script>
</html>
没错,就是我们之前用过的表达式声明,是什么意思呢,我们来一一解释:
var fun这个仅仅就是声明了一个变量,变量的名字叫fun,剩下的function(){},是没有名字的,只是将本身赋值给fun,这个变量了,此时就是一个匿名函数。
而调用也就简单了,和之前的一样:
var fun = function(){
console.log(1);
}
fun();
那我们就是什么变量都不给他赋值呢
... ...
(function(){
alert(123);
})
</script>
</html>
我们看这段代码,我们知道一个括号里面可以写一些表达式,并且优先级是很高的,也可以代表这是一个整体,那我们就直接在括号了写,那么这个函数是有没有名字的呢?
注意,是没有的,那可能会说了,那怎么调用函数啊,我们之前说过了,函数不调用是不能用的,
那我们看上面,调用函数就是定义的变量后面加(),就可以调用了,
那我们这个就是直接加括号就可以了:
可以看到,弹出了窗口,说明函数调用成功了
想这样的我们称为:
立即执行函数 或者叫 自调用匿名函数
在后面的学习中,我们会学习到这样的一个东西:
作用域:
那么有了这个匿名函数,就可以 防止全局变量的污染,封装一个局部作用
这点需要注意,因为我们还没有接触到作用域,但是现在知道有这个就行了,就先有一个这样的概念,这个匿名函数是在后面会有作用的