javascript 函数
一、函数的定义
1、一般函数
//一般函数
//定义函数f1 function f1(x, y) { console.log("x的值:", x) console.log("y的值:", y) return x+ y; } //调用函数f1 ret = f1(10, 15) console.log("x+y=",ret)
2、匿名函数
/* 匿名函数 两个数比较 */ //声明匿名函数 f2 = function (x, y) { if (x > y){ return x; }else { return y; } } //调用匿名函数 ret = f2(5, 10); console.log("最大值为:", ret);
3、直接执行函数
/* 直接执行函数 求和 */ ret = (function (x, y ) { // console.log(x+y) return x+y; })(1, 2); console.log(ret);
二、函数中的arguments
/* 函数中的arguments arguments可以看成一个数组,所有的实参都在这里 */ //定义函数 function f2(x, y) { console.log(arguments.length); for( var i=0 in arguments){ console.log(arguments[i]); //属性[变量名称] } } //调用函数 f2(5,4, 3, 4);
三、局部变量和全局变量
局部变量:在函数内部定义的变量
全局变量:函数外部声明的变量
生命周期:局部变量,函数执行结束;全局变量,关闭网页
四、作用域
局部->全局
/* 作用域 */ var name = "tom"; function f1() { function inner() { var name = "joker" console.log(name); } return inner; } ret = f1(); ret(); // 结果:joker
五、词法分析(了解)
1、过程
语义分析->执行代码
2、词法分析
当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面:
1:函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。
2:函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。
3:函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。
函数内部无论是使用参数还是使用局部变量都到AO上找。