本博文源于js基础,主要讲述函数这一章节,包括
函数
引言
如果一次写成,随时可以调用,那就需要用到函数。
函数的定义和调用
函数的定义
这函数定义跟matlab类似,格式如下:
function 函数名(参数,参数....) {
//函数体
}
函数的调用
<script>
function sum(a,b) {
console.log(a+b);
}
sum(3,5);
</script>
函数也可以做返回值return,例如
<script>
function isEven(n) {
return n%2==0;
}
console.log(isEven(5));
</script>
函数声明的提升
函数声明在预处理阶段会提升
<script>
fun();
function fun() {
alert("函数会被执行");
}
</script>
大家会看到函数先让他执行,再声明,结果不报错!这就叫做函数声明在预处理阶段会被提升。
函数表达式不会提升
如果上面的函数写进表达式里,它不会被提升的。
例如–写进表达式:
fun();
var fun = function fun() {
alert("函数会被执行");
}
外部js文件定义的函数不会提升
这个意思说,让我们先引用js文件,再使用文件里的函数,否则会报错
5-3.js
function isEven(n) {
return n%2==0;
}
主html
<script>
console.log(isEven(5));
</script>
<script src="./5-3.js"></script>
变量作用域
这部分跟c类似,主要无非包括局部、全句、作用域链
局部变量
function fn() {
var a =1;
}
fn();
console.log(a);
a的定义域仅仅在fn里,执行后,它就相当于没了,所以变量未定义。
口诀是:局部变量在局部有效,逃出之后没效果。
全局变量
全局只要放到代码最上面,任何地方都能使用他,除非特殊情况,不建议使用。
作用域链
函数嵌套函数
函数里面套函数,外部函数无法调用内部函数,比如这个:
function fun() {
inner();
function inner() {
console.log("你好");
}
}
fun();
这个会正常运行,但我们如果调用inner()肯定不行的,看结果
function fun() {
inner();
function inner() {
console.log("你好");
}
}
inner();
作用域链
记住口诀:定义重复,局部变量会屏蔽全局变量
递归
递归是一种思想,这个毋庸置疑,只需要体会。写出递归还得看代码实践能力
<script>
function factorial(n) {
if(n==1) {
return 1;
}
return n*factorial(n-1);
}
console.log(factorial(5));
</script>