<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//函数
/* - 函数也是一个对象
一切都是对象--------------- 万物皆对象
- 函数中可以封装一些功能(代码),需要的时执行这些代码
- 函数中可以存储一些代码需要的时候调用
*/
//创建一个函数对象
// var fun = new Function();
// console.log(fun);
// console.log(typeof fun); //使用typeof检查函数时候返回function function也是一个对象
//可以将要封装的代码以字符串的形式传递给构造函数
// var fun = new Function('console.log("123")'); //这种生成函数对象的方法不经常使用,从构造函数生成来看它也是一个对象,只是函数对象功能更加强大
//函数对象也有普通对象的一些属性
// fun.uname = 'liuyun';
// console.log(fun.uname); //liuyun
//封装到函数的代码不会立即执行
//函数中的代码会在函数调用的时候执行
//调用函数语法: 函数对象()
//当调用时,函数中封装的代码会按照顺序执行
// fun(); //123
// fun(); //123
// fun(); //123
//使用函数声明来创建一个函数
// 语法:
// function 函数名([形参1, 形参2......形参n]) {//[]表示可以不写其中内容
// 语法。。。。(函数体);
// }
// function fun() {
// alert(6666);
// document.write(888);
// console.log(345);//可以在函数中封装大量代码
// }
// fun(); //调用函数
//函数表达式创建函数
/*var 函数名 = function([形参1, 形参2......形参n]) {
语句......
}
*/
// function() {//没有函数名的函数为匿名函数
// console.log(666);
// }
// var fun2 = function() { //将匿名函数赋值给fun2
// console.log(888);
// }; //匿名函数赋值给fun2时候最好加上;号
// fun2(); //888
/* 函数的参数
- 定义一个求两个数和的参数
- 可以在函数的()里面指定一个或多个形参,形式上的参数,没有值
- 多个形参之间使用,隔开
*/
function fun(a, b) {
console.log(a + b);
}
fun(1, 2); //3
// - 在调用函数时,可以在()中指定实参(实际参数)
// - 实参将会赋值给对应的形参
// - 调用函数时,解析器不会检查实参类型
// - 实参可以是任意数据类型
// - 需注意是否可能会接收非法参数,如果有可能则需要对参数进行类型的检查
fun(666, 'liuyun'); //666 liuyun
fun(true, false); //1
//调用函数时候,解析器也不会检查实参数量
//多余的实参不会赋值
fun(1, 2, false, null); //3
fun(123); //将123赋值给a,b未赋值则为undefined 123 + undefined = NaN;
//如果实参数量少于形参数量,则没有对应的实参的形参将是undefined
</script>
</body>
</html>