函數實際上是功能完整的對象,所有函數都應看作 Function 類的實例,Function 類可以表示開發者定義的任何函數。
1. 創建
第一種方式:
<script>
//函數名就可以當做一個Function對象來使用
function 函數名(arg1, arg2, ..., argN){
//方法體
}
<script>
第二種方式:
<script>
//定義一個變量指向Function對象
var 變量名 = function 函數名(arg1, arg2, ..., argN){
//方法體
}
<script>
第三種方式:
<script>
//定義一個變量接收Function對象
var 變量名 = new function(arg1, arg2, ..., argN, function_body)
<script>
示例:
<script>
//定義一個變量接收Function對象
var f = new Function("a", "b", "alert(a+b);");
f(1,2);//彈出結果 3
<script>
注意: 儘管可以使用 Function 構造函數創建函數,但最好不要使用它,因爲用它定義函數比用傳統方式要慢得多。
2. 屬性
使用Function對象的length
屬性可以獲得方法形參的個數。
<script>
function f(a,b) {
}
alert(f.length);//彈出結果 2
<script>
3. 方法:
4. 特點:
- 因爲都是使用var定義形參,所以形參的類型可以省略。
- 方法是一個對象,如果定義名稱相同的方法,會覆蓋。
<script>
function add(a,b) {
alert(a + b);
}
//即使參數個數不同也會覆蓋
function add(a,b,c) {
alert(a + b + 10);
}
add(5,5);//結果20。注意:沒有傳值給形參c,c被默認賦值爲undefined
</script>
由上可知: 方法的調用只與方法的名稱有關,和參數列表無關。
- 在方法聲明中有一個隱藏的內置對象 arguments(數組),封裝所有的實參。
<script>
//計算n個數的和
function sum() {
let res = 0;
/*for (let argument of arguments) {
res += argument;
}*/
for (var i = 0; i < arguments.length; i++) {
res += arguments[i];
}
alert(res);
}
sum(1, 2, 3, 4, 5);
</script>