函数(方法): 可复用的代码区域(代码块)。
一、函数的创建:
- function 命令声明一个函数,function 后面一般给函数名,函数名后面是一对圆括号。
- 变量赋值的写法,把一个(匿名)函数赋值给一个变量。
- 构造函数 Function(js 内置的一个创建函数的函数)
函数声明以后不会运行,必须要调用函数,调用函数就是用函数名加圆括号。
function test(){
document.write('111');
}
test();
var test2 = new Function(document.write(333)) // 等价于var test2=function(){ document.write(333) }
test2()
二、函数的参数,在函数名后圆括号里面的变量,就叫参数(形参);在函数内部就可以使用参数。
function print(x,y=10){ // 参数可以设置默认值
console.log(x+y);
}
print(10); // 函数的参数是在调用的时候赋值(实参)。
三、arguments 对象,该对象包含了函数的所有参数。一般需要转成真实数组
function print1(){
console.log(arguments[0]+arguments[1]);
}
print1(1,2,3);
四、变量提升。
js有预编译,把所有var 声明的变量提到顶部。
console.log(x);
var x=10;
/**
* 变量提升会把文件编译为 var x;console.log(x);x=10;
*/
函数名提升:
js预编译会把所有function 声明的函数名提升到代码顶部;
如果函数名和变量名重名,函数覆盖变量。
function move(){
document.write("move");
}
var move="aa";
五、全局变量: 在函数外部的变量,都是全局变量。全局变量是任意位置都可以调用。
var name="global name"; // var 声明的全局变量是放在window对象的属性上面。
//console.log(window); // window对象是整个浏览器窗口对象,js的的所有内置属性都是属于window对象。
局部变量: 在函数内部创建的变量,就是局部变量。
function print2(){
console.log(p1);
var p1 = "hello"; // 局部变量
// 局部变量也有提升,把变量提升在函数的顶部。var p1;console.log(p1);p1="hello";
}
// console.log(p1);
print2();
六、return 返回值(函数内部使用),返回函数内部的值到函数外部。
function print3(){
var p2 = "i am p2";
return p2; // 返回p2的值到函数外部,return能终止后面代码的运行。
var x = 10;
console.log(x);
}
let getP2 = print3(); // 调用函数就能拿到return 返回的结果。
console.log(getP2);
console.log(typeof(print3)); // 函数的数据类型返回的是function
七、函数的属性(函数是一种特殊的对象类型)
- 1. name 返回函数的名称
- 2. length 返回函数参数的个数
var print4 = function print2(x,y){}
console.log(print4.name);
console.log(print4.length);
八、递归函数: 函数内部调用自身函数。使用递归函数必须要有结束条件,不然就是无限调用,应用就会崩溃。
应用: 阶乘,5的阶乘 1*2*3*4*5;
function count(num){
if(num === 1){
return num
}
return count(num-1)*num
}
console.log(count(5));