1. 程式人生 > >JavaScript基礎回顧之函式(二)

JavaScript基礎回顧之函式(二)

匿名函式 (函式沒有名稱) 函式儲存在變數中,不需要函式名稱,通常通過變數名來呼叫。: 例項

var x = function (a, b) {return a * b};
var z = x(4, 3);

Function() 建構函式 通過關鍵字 function 定義。

var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
//實際上,不必使用建構函式。上面例項可以寫成:
var myFunction = function (a, b) {return a * b}
var x = myFunction(4, 3);

函式提升(Hoisting) 提升(Hoisting)是 JavaScript 預設將當前作用域提升到前面去的的行為。提升(Hoisting)應用在變數的宣告與函式的宣告。

myFunction(5);
function myFunction(y) {
    return y * y;
}

自呼叫函式(function(){})() 函式表示式可以 “自呼叫”。如果表示式後面緊跟 () ,則會自動呼叫。不能自呼叫宣告的函式。

(function () {
    var x = "Hello!!";      // 我將呼叫自己
})(); 

函式可作為一個值使用 JavaScript 函式作為一個值使用:

function myFunction(a, b) {
    return a * b;
}
var x = myFunction(4, 3);

函式是物件 在 JavaScript 中使用 typeof 操作符判斷函式型別將返回 “function” 。但是JavaScript 函式描述為一個物件更加準確。JavaScript 函式有 屬性 和 方法。arguments.length 屬性返回函式呼叫過程接收到的引數個數:

function myFunction(a, b) {
    return arguments.length;
}

JavaScript 函式呼叫

  • 作為一個函式呼叫 function myFunction(a, b) { return a * b; } myFunction(10, 2); // myFunction(10, 2) 返回 20
  • 函式作為方法呼叫 例項建立了一個物件 (myObject), 物件有兩個屬性 (firstName 和 lastName), 及一個方法 (fullName): var myObject = { firstName:“John”, lastName: “Doe”, fullName: function () { return this.firstName + " " + this.lastName; } } myObject.fullName(); // 返回 “John Doe”
  • 使用建構函式呼叫函式 函式呼叫前使用了 new 關鍵字, 則是呼叫了建構函式。 // 建構函式: function myFunction(arg1, arg2) { this.firstName = arg1; this.lastName = arg2; } // This creates a new object var x = new myFunction(“John”,“Doe”); x.firstName; // 返回 “John”
  • 作為函式方法呼叫函式 call() 和 apply() 是預定義的函式方法。 兩個方法可用於呼叫函式,兩個方法的第一個引數必須是物件本身。 function myFunction(a, b) { return a * b; } myObject = myFunction.call(myObject, 10, 2); // 返回 20 //apply************ function myFunction(a, b) { return a * b; } myArray = [10, 2]; myObject = myFunction.apply(myObject, myArray); // 返回 20

JavaScript 閉包 全域性變數的作用域是全域性性的,即在整個JavaScript程式中,全域性變數處處都在。而在函式內部宣告的變數,只在函式內部起作用。閉包是可訪問上一層函式作用域裡變數的函式,即便上一層函式已經關閉。 var add = (function () { var counter = 0; return function () {return counter += 1;} })(); add(); add(); add(); 變數 add 指定了函式自我呼叫的返回字值。自我呼叫函式只執行一次。設定計數器為 0。並返回函式表示式。add變數可以作為一個函式使用。非常棒的部分是它可以訪問函式上一層作用域的計數器。 JavaScript 閉包,它使得函式擁有私有變數變成可能。計數器受匿名函式的作用域保護,只能通過 add 方法修改。

JavaScript 內嵌函式 所有函式都能訪問全域性變數。實際上,在 JavaScript 中,所有函式都能訪問它們上一層的作用域。JavaScript 支援巢狀函式。巢狀函式可以訪問上一層的函式變數。