############### JS函数 ################
//js中函数和python中的函数非常的相似,只是定义的方式有些不同 //函数的定义 function foo(a,b) { console.log(a); console.log(b); return a+b; //带返回值的函数 } //匿名函数 //需要使用一个变量去接收他, var func = function (a,b) { console.log(a); console.log(b); return a+b; //带返回值的函数 }; //立即执行函数 //先写两个括号,第一个括号内部定义,第二个括号内部传递具体的参数 (function (a,b) { console.log("立即执行函数"); console.log(a+b) })(11,222); //arguments function foo(a,b) { console.log(a); console.log(b); console.log(arguments.length); //这个 arguments 根据传入的参数,是一个列表[a,b] //可以遍历这个arguments对象 return a+b; //带返回值的函数 } //函数的调用 var ret1 = foo(11,22); // 调用的时候,如果传递的超出定义的,超出的不起作用,并不会导致程序报错, //如果传递的参数少于定义的,未定义的就会显示undefined,也不会程序报错, //这是js比较随便的地方, console.log(ret1); var ret2 = func(11,12); console.log(ret2); /* 局部变量: 在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。 全局变量: 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。 变量生存周期: JavaScript变量的生命期从它们被声明的时间开始。 局部变量会在函数运行以后被删除。 全局变量会在页面关闭后被删除 * */
############### JS词法分析 ################
//js的词法分析 var age =18; function foo() { console.log(age); var age =22; console.log(age); } foo(); //结果是 undefined ,22 , //为什么? //因为函数执行的时候,会对函数内部进行词法分析 /* JavaScript中在调用函数的那一瞬间,会先进行词法分析。 词法分析的过程: 当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面: 1:函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。 2:函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。 3:函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。 函数内部无论是使用参数还是使用局部变量都到AO上找。 * */