1. 程式人生 > >[記錄] JavaScript 中的函數

[記錄] JavaScript 中的函數

函數 提升 abc efi 函數名 出現 prototype ons 方法調用

函數: 函數是一段可以反復調用的代碼塊。可以傳遞參數,不同的參數會返回不同的值。 函數聲明的三種方法: 1. function 命令 function 命令聲明的代碼塊,就是一個函數。 function 命令後面是函數名,函數名後面是一對圓括號(), 裏面可以傳入參數。函數體放在大括號裏面。 function show(name) { // 代碼塊... console.log( name ); } 2. 函數表達式 除了用 function 命令聲明函數, 還可以采用變量賦值的寫法。 var show = function(name) { // 代碼塊... console.log( name ); }; 這種寫法是將一個匿名函數賦值給變量。因為賦值語句的等號右側只能放表達式,所有這個匿名函數稱函數表達式。 帶名的函數表達式,函數名在函數體內有效,在函數體外部無效。 var show = function abc() { // 代碼塊... // 命名函數表達式 // 每個函數都會有一個name的屬性,這裏的區別就在於 show.name 是 abc }; 註意: 函數作為表達式出現,則會忽略名稱。函數表達式需要在語句結尾加上分號,表示語句結束。 3. Function 構造函數 Function 構造函數可以不使用new命令,返回結果完全一樣。這種聲明方式少人使用。 var show = new Function( "x", "y", "return x + y" ); // 等同於 function show(x, y) { return x + y; } Function 構造函數的最後一個參數會被當作函數體,如果只有一個參數,該參數就是函數體。 函數的重復聲明: 同一個函數被多次聲明,後面的聲明會覆蓋前面的聲明。 function show() { console.log(‘A‘); } show(); // A function show() { console.log(‘B‘); } show(); 上面代碼中,後聲明show函數覆蓋了之前的。在預編譯環節,由於函數名的提升至最前,前一次聲明在任何地方都是無效的。 函數名的提升: JavaScript 引擎將函數名視同變量名,所有采用 function 命令聲明函數,都會被提升到代碼頭部。 // 先調用 show(); // 後聲明,由於"變量提升", 所以代碼可以正常執行 function show() { .. } 采用賦值語句定義函數,先調用,再聲明就會報錯。 show(); var show = function() {} // TypeError: show is not a function 等同以下形式 var show; show(); show = function() {}; 註意: 同時采用 function 命令 和 賦值語句 聲明同一個函數,最後采用的總是賦值語句定義的。 var show = function() { console.log("A"); }; function show() { console.log("B"); } show(); // A 函數本身的作用域: 函數執行時所在的作用域,是定義時的作用域,而不是調用時所在的作用域。 函數的屬性和方法: A. name 屬性 函數的 name 屬性返回函數的名字 function show() {} show.name; // show 變量賦值定義的函數,name 屬性返回變量名。 var show = function () { // 匿名函數表達式 }; show.name; // show var show = function abc() { // 有名函數表達式 } show.name; // abc B. length 屬性 (函數形參的個數) function show(a, b){ // a,b 是函數的形參 } show.length; // 2 C. toString() 方法: 返回一個字符串,內容是函數的源碼; function show() { // 註釋 hide(); } show.toString(); 結果: "function show() { // 註釋 hide(); }" 在函數聲明的時候定義的參數, 叫形式參數 - 形參; 在函數調用的時候傳入的參數, 叫實際參數 - 實參; 參數: function test(a, b){ // 函數內部相當於聲明了兩個變量 // var a; // var b; // 函數內部有一個實參列表 arguments - [1,2,3] 是一個類數組 // 獲取形參的長度 test.length; // 形參個數 和 實參列表arguments一一對應,如有一方修改則都改,例外:當實參小於形參時,修改形參變量,對應的arguments為undefined // return; // 1. 終止 (默認在邏輯的最後會有一個return); // 2. 函數返回值 return 123; } 參數特點: 不定參,形參比實參多,內部用到則默認為undefined。實參比形參多,則忽略; 函數調用方式: 1. 直接調用函數 (this指向window) function init(){ // 代碼塊... } init(); // window.init(); 2. 作為方法調用 (this指向當前對象) var myObject = { value: 100, init: function() { console.log( this.value ); } } myObject.init(); // 100 3. 構造函數,用new關鍵字來新建一個函數對象的調用; (this指向被綁定到的構造函數實例上) var init = function (status) { this.status = status; } init.prototype.getStatus = function () { return this.status; }; var test = new init(‘構造函數‘); console.log( test.getStatus() ); // 構造函數; this指向test

[記錄] JavaScript 中的函數