本文實例講述了JavaScript函數的特性與應用實踐。分享給大家供大家參考,具體如下:
函數用于指定對象的行為。所謂的編程,就是將一組需求分解為一組函數和數據結構的技能。
JavaScript 函數就是對象。對象是名值對的集合,它還擁有一個連接到原型對象的鏈接。對象字面量產生的對象連接到 Object.prototype,而函數對象連接到 Function.prototype(這個對象本身連接到 Object.prototype)。每個函數在創建時會附加兩個隱藏屬性:函數的上下文以及實現函數的代碼。
函數對象在創建后會有一個 prototype 屬性,它的值是一個擁有 constructor 屬性、且值既是該函數的對象。
因為函數是對象,所以可以被當做參數傳遞給其他函數。它也可以再返回函數。
函數可以通過字面量進行創建:
var add = function (a, b) { return a + b;}這里沒有給函數命名,所以稱它為匿名函數。
一個內部函數除了可以訪問自己的參數和變量之外,還可以訪問它的父函數的參數和變量。通過函數字面量創建的函數對象包含一個連接到外部上下文的連接,這被稱為閉包。它是 JavaScript 強大表現力的來源。
調用一個函數會暫停當前函數的執行,它會傳遞控制權和參數給這個被調用的函數。
當函數的實際參數的個數與形式參數的個數不匹配時,不會導致運行時錯誤。如果實際參數的個數過多,那么超出的參數會被忽略;如果實際參數的個數過少,那么缺失的值會是 undefined。不會對參數類型進行檢查,所以任何類型的值都可以被傳遞給任何參數。
當一個函數被保存為對象的一個屬性時,就稱它為方法。當方法被調用時,this 被綁定到這個對象。如果調用表達式包含一個提取屬性的動作(即包含一個”.” 點表達式或 “[]” 下標表達式),那么它就是被當做一個方法被調用。
var myObject = { value: 0,//屬性 increment: function (inc) {//方法 this.value += typeof inc === 'number' ? inc : 1; }};myObject.increment();console.log(myObject.value);//1myObject.increment(2);console.log(myObject.value);//3這里可以使用 this 來訪問自己所屬的對象。通過 this 可以取得它們所屬對象的上下文的方法被稱為公共方法。
var add = function (a, b) { return a + b;}var sum = add(3, 4);//7;this 被綁定到全局對象這里的 this 被綁定到全局對象,這其實是語言設計上的失誤!如果設計正確,那么當內部函數被調用時,this 應該被綁定到外部函數的 this 變量才是。可以這樣解決:為這個方法定義一個變量并給它賦值為 this,這樣內部函數就可以通過這個變量訪問到 this 啦,一般把這個變量命名為 that:
新聞熱點
疑難解答
圖片精選