JavaScript 高級(2)- Arguments,Function - 學習進行中

函數概述

函數是ECMAScript的核心。
聲明方式:關鍵字function,函數名,一組參數,以及在括號中待執行的代碼。
如果函數無明確的返回值,或者調用了沒有參數的return語句,返回的值是undefined

arguments對象

在函數代碼中,使用特殊對象arguments的作用:

  • 就無需明確指出參數名,就能訪問它們
  • 可用來檢測函數對象的參數個數
  • 模擬函數重載
function explainArguments() {
	// 訪問,檢測個數
	console.log(arguments[0], arguments.length);
	// 模擬函數重載
	if (arguments.length === 1) {
		console.log(arguments[0] + '拼接');
	} else if (arguments.length === 2) {
		console.log(arguments[1] + 100);
	}
}
explainArguments('string', 100, '456');  // string, 3
explainArguments('string', 100);  // 200
explainArguments('string');  // string拼接

Function對象(類)

ECMAScript的函數實際上是功能完整的對象。
Function類可以表示開發者定義的任何函數。
用Function類直接創建函數的語法如下:

var function_name = new function(arg1, arg2, ..., argN, function_body)

理解:

function add(iNum) {
	console.log(iNum + 10);
}
function add(iNum) {
	console.log(iNum + 20);
}
add(10); // 30 第二個函數重載了第一個函數

重寫代碼來理解:

var add = new Function('iNum', 'console.log(iNum + 10)');
var add = new Function('iNum', 'console.log(iNum + 20)');  // 重新定義了
add(10); // 30

例如:
如下代碼,add被定義爲函數,newAdd被聲明爲指向同一個函數的指針。用這兩個變量都可以執行該函數的代碼,輸出相同的結果。因此,如果函數名只是指向函數的變量,可以把函數作爲參數傳遞給另一個函數。

var add = new Function('iNum', 'console.log(iNum + 10)');
var newAdd = add;
add(10);  // 20
newAdd(10);  // 20

如下代碼,傳參兩個,要調用的函數和快遞給該函數的參數

function foo(fn, arg) {
	fn(arg);
}
var add = new Function('iNum', 'console.log(iNum + 10)');
foo(add, 10);  // 20

儘量不使用Function構造函數來創建函數,因爲它定義函數比用傳統方式要慢得多。所有函數都應該看作Function類的實例

Function對象的length屬性

如下函數,add()定義一個參數,長度爲1;add2()沒有定義參數,長度爲0。

function add(iNum) {
 	console.log(iNum);
 }
 function add2() {
	console.log('123');
}
console.log(add.length);  // 1
console.log(add2.length);  // 0

ECMAScript可以接受任意多個參數(最多25個)

Function對象的方法

Function 對象也有與所有對象共享的 valueOf() 方法和 toString() 方法。這兩個方法返回的都是函數的源代碼,在調試時尤其有用。

function add(iNum) {
  console.log(iNum + 10);
}
add.toString();
發佈了16 篇原創文章 · 獲贊 13 · 訪問量 4073
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章