JavaScript中定义函数的方式
1. 函数声明方式
function 函数名称() {
函数体;
}
2. 函数表达式方式
var 变量名称 = function() {
函数体;
};
1) 函数表达式方式创建的函数是没有名称的函数
2) 变量中存储的是对函数的引用
3) 函数声明方式和函数表达式方式的区别,函数声明方式定义的函数可以在定义之前调用该函数,但是函数表达式方式定义的函数,不可以在定义之前调用。因为函数声明方式定义的函数有函数声明提升操作,而函数表达式方式定义的操作没有函数声明提升操作,只有变量声明提升操作
3. 利用Function构造方法创建函数
var 变量名称 = new Function(‘参数1’, ‘参数2’, ‘参数3’…);
构造方法Function中的参数可以有多个,那么前面的参数表示函数的形参,最后一个参数表示函数体
调用方式为:变量名称(实参1,实参2,实参3…);
注意:这种方式定义的函数也不可以在定义之前调用,因为它也只有变量声明提升操作
// 定义一个函数,功能是打印1-10之间的偶数
// 函数声明方式
printNum();
function printNum() {
for (var i=1; i<=10; i++) {
if (i%2 == 0) {
console.log(i);
}
}
}
// 函数表达式方式
var fn = function() {
for (var i=1; i<=10; i++) {
if (i%2 == 0) {
console.log(i);
}
}
};
fn();
// 利用Function构造方法定义一个函数,功能是求三个数的和
var add = new Function('num1', 'num2', 'num3', 'var sum = num1+num2+num3; console.log(sum);');
add(1, 2, 3);
Js中的三种特殊函数
1. 匿名函数:没有函数名称的函数,匿名函数可以和事件相结合
HTML元素.on事件名称 = function() {函数体 };
<!-- 在页面中创建一个button按钮,当点击该按钮时,在控制台生成验证码,由字母、数字构成的5位的字符串 -->
<button>按钮</button> //定义html函数
<script>
//获取页面中的button
var btn=document.querySelector('button');
btn.onclick=function(){
var str= "0123456789" +
"abcdefghijklmnopqrstuvwxyz" +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var str1="";
for(var i=0;i<5;i++){
var s=str[parseInt(Math.random()*(str.length-1)+1)];
str1=str1+s;
}
console.log(str1);
};
</script>
2. 回调函数:一个函数被当做另一个函数的参数,如数组的排序函数
var arr = [1, 0, 7, 12, 3, 2, 15];
//数组的排序
arr.sort(function(a, b) {
return a - b;
});
console.log(arr);
3. 匿名自执行函数:没有名称且不需要手动调用的函数
- 无参无返回值的匿名自执行函数
(function() {
函数体;
})();
- 有参无返回值的匿名自执行函数
(function(形参1,形参2,形参3...) {
函数体;
})(实参1,实参2,实参3...);
- 有参有返回值的匿名自执行函数
var 变量名称 = (function(形参1,形参2,形参3...) {
函数体;
return 返回值;
})(实参1,实参2,实参3...);
注意:匿名自执行函数通常用来创建块级作用域
<!--// 定义一个匿名自执行函数,功能是在控制台打印一个hello-->
<script>
(function(){
console.log("hello");
})();
</script>
<!--// 定义一个匿名自执行函数,求两个数的和-->
<script>
(function(a,b){
console.log(a+b);
})(1,2);
</script>
<!--// 定义一个匿名自执行函数,功能是求两个数的和,将和作为返回值返回-->
<script>
(function(a,b){
var sum=a+b;
console.log(sum);
return sum;
})(1,3);
</script>