javascript函数

一、概念

函数:就是封装起来的可以重复被调用的代码块。
【在js中,函数是头等对象,因为它们可像任何其他对象一样具有属性、方法。区别在于函数可被调用function对象】

二、使用函数的优势

  1. 程序更加简洁;
  2. 后期维护更加方便;
  3. 逻辑更加清晰。

三、函数的声明(定义)

(一)命名规则:

函数的命名规则和变量名是一样的(同“javascript变量的声明、赋值、命名”中提到命名规则一样)
:函数名也不能和变量名重复,否则发生覆盖现象。
e.g.

var a = function a() {
	 	console.log(111);     //111
	 };
	 a();
	 a = 1;
	 console.log(a);    //1

(二) 声明方式

1. 使用function关键字声明

语法结构

function 函数名 (参数[可有可无]) {
	//函数主体
}

e.g.

a(); //在同一代码块中,可提前调用函数
function a(){
	alert(1);
}
a();//调用函数
a();//可多次调用同一函数

2. 匿名函数(以下介绍3种方式)

(1)直接声明一个变量,将一个函数赋值给他
语法结构

var 变量 = function (){}

e.g.

foo();  //不被优先解析,在此foo是一个变量
var foo = function (){
	console.log(1);  //1
}
foo();

(2)在计时器中声明
语法结构: setInterval(function (){},1000);
e.g.

setInterval(function () {
	  console.log(1)
	},1000)
	setTimeout(function () {
        console.log(1)
    },5000)

(3)在一个事件后面声明
语法结构:div.onclick = function (){};
e.g.

<body>
	<div>点我</div>
	<script>
	    var box = document.querySelector("div");
	    box.onclick = function () {
	        console.log("点就对了");
	    }
	</script>
</body>

(三)函数的调用

1. 函数名(); 变量名();

【函数调用形式】一般在声明函数后直接调用
e.g.

function func() {
	   console.log("hello");
	};
	func(); //声明一个函数并调用
	var foo = function () {
	    console.log("hi");
	};
	foo();  //声明一个匿名函数赋值给一个变量,然后调用

2. 在事件后调用

e.g.同上

<body>
	<div>点我</div>
	<script>
	    var box = document.querySelector("div");
	    box.onclick = function () {
	        console.log("点就对了");
	    }
	</script>
</body>

3. 自调用(自己调用自己)

e.g.

// fn();   //Uncaught ReferenceError: fn is not defined
	 (function fn(){
	     console.log("自调用");
	 })();
	 //fn();    //Uncaught ReferenceError: fn is not defined

:在自调用前后调用此函数均报错!

(四)函数的参数

1. 概念

在调用函数时,可以向其传递值,这些值被称之为参数。

2. 特点:

让函数的调用更加灵活

e.g.

function pyramid(rows) {
for (var i=1;i<=rows;i++){
	for (var j=0;j<=rows-i;j++){
		document.write(" ");
	}
	for (var n=1;n<=i;n++){
		document.write("* ");
	}
	document.write("<br>");
	}
}
pyramid(5);
pyramid(2);
pyramid(3);

效果图

javascript命名规则有哪几个 javascript函数命名规则_javascript命名规则有哪几个

3. 分类(实参/形参)

实参:在调用函数时传递的真正的值
形参:在声明函数时定义的变量
语法结构

function 函数名foo(参数--形参){       //封装函数时,括号内的参数为形参
	//函数主体
} 
函数名foo(参数--实参);  //调用函数时,括号内的参数为实参

e.g.

<script>
    function myFunction(name,job) {
        console.log("welcome" + name + ",the" + " " + job);//welcomeBill Gates,the CEO
    }
    myFunction("Bill Gates",'CEO');
</script>

4. 参数的个数

可以是多个,写多个参数时,用逗号“,”隔开。
:形参、实参必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。

5. 参数的默认值(undefined)

函数参数的默认值是undefined。若在调用函数时,参数的值没被提供,那么它的值就为undefined。
函数默认参数:允许在没有实参值或者undefined被传入时使用默认形参。

  • 当实参的个数少于形参的个数时,未被传递值得形参被赋值为undefined
  • 当实参的个数多于形参的个数时,不会报错,但多出个数的实参不解析
    e.g.
//实参 < 形参
function fun1(a,b,c) {
    console.log(a); //1
    console.log(c); //undefined
}
fun1(1,2);
//实参 > 形参【不报错,多出个数不被解析】
function fun2(a,b) {
    console.log(a); //1
    console.log(b); //2
}
fun2(1,2,3,4,5,6);

6. 参数的数据类型

可以是任意数据类型【可查看“javascript数据类型”一篇】
数据类型:数值(number);字符串(string);布尔值(Boolean);未定义(undefined);空值(null);Symbol(ES6新增);对象(object)
e.g.

function table (rows,sols,color){
   if(rows==undefined){
        rows = 10;
    }
    if(sols==undefined){
        sols = 10;
    }
    if(color==undefined){
        color = "#ccc";
    }

    //以上三个if语句可简写为:

    rows = rows || 10;
    sols = sols || 10;
    color = color || "#ccc";
    document.write("<table border='1' align='center'>");
    for(var i=1;i<=rows;i++){
        if(i%2==0){
            document.write(`<tr bgcolor=${color}>`);
        }else {
            document.write("<tr>");
        }
        for(var j=0;j<sols;j++){
            document.write(`<td>第${i}行 第${j+1}列</td>`);
        }
        document.write("</tr>");
    }
    document.write("</table>");
}
table(5,6,'blue');
table(5,6);

效果图

javascript命名规则有哪几个 javascript函数命名规则_javascript命名规则有哪几个_02

7. 每每声明一个函数,函数内部都会自动生成一个arguments对象

arguments对象会保存所有传递的实参;
arguments伪变量的length属性是某次调用的实参的个数
函数对象的length属性是形参的个数
e.g.

function fun(a,b) {
	console.log(arguments);  //Arguments(3)对象[保存所有传递的实参]
	console.log(fun.length);  //2[函数对象的length属性是形参的个数]
	for(var i = 0;i<arguments.length;i++){  //arguments伪变量的length属性是某次调用的实参的个数
		console.log(arguments[i]);  //1 2 3
	}
}
fun(1,2,3);

(五)函数的返回值

1. 概念

是定义在函数内部的语法结构,返回的至就是函数调用表达式的结果。

2. return语法

return 返回值,即 return value。

function myFun() {
	var x = 1;
	return x;  //返回值 1
}

: return语句仅仅使函数停止执行,JS继续执行代码(从函数调用的地方)。函数调用将被返回值取代。

3. return的使用

(1)赋值给变量
function myFun() {
	var x = 1;
	return x;  //返回值 1
}
var myVar = myFun();
console.log(myVar); //1
(2)即使不保存为变量,同样可以使用返回值
function myFun() {
	var x = 1;
	return x;  //返回值 1
}
var box = document.querySelector("#demo").innerHTML = myFun();
 //获取到一个id为demo的元素,使其innerHTML为1,也就是myFun()所返回的值。
(3)返回值基于传递到函数中的参数返回。
function fun(a,b) {
  return a * b;
}
var num = fun(2,3);
console.log(num); //6
(4)使用return,仅希望退出函数。
function out(m,n) {
	if(m>n){
		return;
	}
	console.log(m * n);
}
out(2,3); //6
out(5,3); //无输出

4. 特征

  • 返回值只能有一个(多写无意义);
  • return语句后的代码会被自动忽略掉,起到终止函数的执行并返回函数的值。
  • return语句可有可无,可以返回任意我们所需要的值。