函数-1
1 函数的定义 2 // 1) 函数声明方式 3 function sum(a, b) { 4 console.log(1+3); 5 } 6 sum(10, 20); 7 8 // 2) 函数表达式声明方式 9 var add = function () { 10 console.log(1+3); 11 }; 12 add(); 13 14 // 3) 使用Function构造函数 15 var add2 = new Function('console.log(1+3);'); 16 add2();
***函数的实参可以大于形参的个数,但是,实参比形参少,存在问题
1 // 求出多个数的和 2 function sum(numArr) { 3 var value = 0; 4 for(var i=0; i<numArr.length; i++){ 5 value += numArr[i]; 6 } 7 console.log(value); 8 } 9 // var numArr = [10, 20, 30]; 10 sum([10, 20, 30, 90, 100]); 11 12 13 function sum(num1, num2) { 14 // arguments对象,会把函数传入的值,放到arguments中,伪数组 15 // console.log(arguments); 16 var value = 0; 17 for(var i=0; i<arguments.length; i++){ 18 value += arguments[i]; 19 } 20 console.log(value); 21 console.log(arguments.length); 22 console.log(sum.length); 23 if(arguments.length === sum.length){ 24 //sum.length传入形参的个数,就是判断形参与实参的个数是否相等 25 } 26 } 27 28 sum(10, 20, 30, 100, 200, 100, 20);
1 // 1. 函数直接声明 2 function sum(num1, num2) { 3 return num1 + num2; 4 } 5 6 7 console.log(sum(10, 20)); 8 //会将当前的作用域的函数声明作用到整个作用域的最前面 console.log(sum(10, 20));放到函数前面也可以执行 9 10 11 12 // 2. 函数表达式声明 13 14 var add = function (num1, num2) { 15 return num1 + num2; 16 }; 17 console.log(add(20, 40)); 18 //输出调用函数只能在函数声明的下方调用
1 匿名函数 2 1、绑定事件 3 2、定时器 4 3、自调用函数 5 document.onclick = function () { 6 alert("点我干嘛?"); 7 }; 8 9 setInterval(function () { 10 console.log(1111); 11 }, 1000) 12 13 3、自调用函数--闭包 14 (function () { 15 alert("真的会执行吗?"); 16 })();
1 回调函数:如果把函数的指针(地址)当作参数传递给另外一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数; 2 在一个函数中调用另外一个函数 3 4 function fn(num1, num2, func) { 5 return func(num1, num2); 6 } 7 8 //小案例 9 // 加减乘除函数 10 function add(a, b) { 11 return a + b; 12 } 13 14 function sub(a, b) { 15 return a - b; 16 } 17 18 function mul(a, b) { 19 return a * b; 20 } 21 22 function divide(a, b) { 23 return a/b; 24 } 25 26 console.log(fn(10, 20, add)); 27 console.log(fn(10, 20, sub)); 28 console.log(fn(10, 20, mul)); 29 console.log(fn(10, 20, divide));
1 // 求Fibonacci的第n个数 2 // 1 1 2 3 5 8 13 21... 3 4 function f1(n) { 5 if(n === 1 || n === 2) return 1; 6 7 return f1(n-1) + f1(n-2); 8 } 9 10 console.log(f1(8));
1 var name = "张三";//全局 2 { 3 var age = 19000; 4 console.log(name);//可以找到 5 } 6 console.log(age);//可以输出 7 8 function test() { 9 var sex = "男";//局部 10 console.log(name); 11 } 12 13 test(); 14 15 console.log(sex);//找不到
函数内部可以找到函数外部的变量,只有在函数内部才是局部变量,如果变量用var声明的就是局部变量,没有用var 声明的就是全局变量
function test() { sex = "女"; console.log(name + "局部打印"); } test(); console.log(sex); //没有用var 声明的为全局变量
//这里的sex就是全局变量,但不推荐使用
1 var color = "yellow"; 2 function getColor() { 3 var anotherColor = "red"; 4 5 function swapColor() { 6 var tmpColor = color; // y 7 color = anotherColor; // r 8 anotherColor = tmpColor; // y 9 } 10 swapColor(); 11 } 12 13 getColor(); 14 console.log(color); // red
var num = 10; fun(); function fun(){ // 声明提前 //var num;会把num=20分解,将var num;提前声明,赋值还在下方 console.log(num); var num = 20; } //Undefied
var a = b = c = 9; a是局部的,b.c是全局的