標籤:定義函數 val 屬性 tostring 就是 頭部 擷取 表示 重複
函數: 函數是一段可以反覆調用的代碼塊。可以傳遞參數,不同的參數會返回不同的值。 函式宣告的三種方法: 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 中的函數