1、函數的定義數組
一、通常函數ide
//通常函數
//定義函數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)
二、匿名函數函數
/* 匿名函數 兩個數比較 */ //聲明匿名函數 f2 = function (x, y) { if (x > y){ return x; }else { return y; } } //調用匿名函數 ret = f2(5, 10); console.log("最大值爲:", ret);
三、直接執行函數spa
/* 直接執行函數 求和 */ ret = (function (x, y ) { // console.log(x+y) return x+y; })(1, 2); console.log(ret);
2、函數中的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);
3、局部變量和全局變量生命週期
局部變量:在函數內部定義的變量作用域
全局變量:函數外部聲明的變量it
生命週期:局部變量,函數執行結束;全局變量,關閉網頁io
4、做用域console
局部->全局
/* 做用域 */ var name = "tom"; function f1() { function inner() { var name = "joker" console.log(name); } return inner; } ret = f1(); ret(); // 結果:joker
5、詞法分析(瞭解)
一、過程
語義分析->執行代碼
二、詞法分析
當函數調用的前一瞬間,會先造成一個激活對象:Avtive Object(AO),並會分析如下3個方面:1:函數參數,若是有,則將此參數賦值給AO,且值爲undefined。若是沒有,則不作任何操做。2:函數局部變量,若是AO上有同名的值,則不作任何操做。若是沒有,則將此變量賦值給AO,而且值爲undefined。3:函數聲明,若是AO上有,則會將AO上的對象覆蓋。若是沒有,則不作任何操做。函數內部不管是使用參數仍是使用局部變量都到AO上找。