JavaScript函數運算式

來源:互聯網
上載者:User

標籤:建立   result   java   匿名函數   模仿   some   函數範圍   建構函式   變數   

函式宣告

函式宣告提升

函數運算式

匿名函數/拉姆達函數

 

1 遞迴

2 閉包(有權訪問另一個函數範圍中的變數的函數)

2.1 閉包與變數

閉包只能取得包含函數中任何變數的最後一個值。

function createFunctions() {    var result = new Array();    for (var i = 0; i < 10; i++) {        result[i] = function() {            return i;        }    }    return result;}

// 結果返回10個10;

可以通過建立另一個匿名函數強制讓閉包的行為符合預期(但是感覺有點蠢而且容易亂)

function createFunctions() {    var result = new Array();    for (var i = 0; i < 10; i++) {        result[i] = function(num) {            return function() {                return num;            }        }    }}

2.2 關於this對象

匿名函數的執行環境具有全域性,通過call()或apply()改變函數執行環境的情況下,this就會指向其他對象。

var name = "The Window";var object = {    name: "My Object",    getNameFunc: function() {        return function() {            return this.name;        }    }};alert(object.getNameFunc()()); //"The Window"(在非strict 模式下)

2.3 記憶體流失

如果閉包的範圍鏈中儲存著一個html元素,將會導致該元素無法被銷毀。

function assignHandler() {    var element = document.getElementById("someElement");    var id = element.id;    element.onclick = function() {        alert(id);    };    //Important!!!    element = null;}

 

3 模仿塊級範圍

JavaScript沒有塊級範圍的概念。

function outputNumbers(count) {    for (var i=0; i < count; i++) {        alert(i);    }    alert(i); //計數}

匿名函數可以用來模仿塊級範圍。

(function() {    // 這裡是塊級範圍})();
function() {    }(); //出錯!

 

4 私人變數

JavaScript中並沒有私人成員的概念,所有對象屬性都是公有的。

有權訪問私人變數和私人建構函式的公有方法被稱為特權方法。

function MyObject() {    //私人變數和私人函數    var privateVariable = 10;    function privateFunction() {        return false;    };    this.publicMethod = function() {        privateVariable++;        return privateFunction();    };}

4.1 靜態私人變數

(function() {    //私人變數和私人函數    var privateVariable = 10;    function privateFunction() {        return false;    }    MyObject = function() {    };    MyObject.prototype.publicMethod = function() {        privateVariable++;        return privateFunction();    };})();

4.2 模組模式

var singleton = function() {    //私人變數和私人函數    var privateVariable = 10;    function privateFunction() {        return false;    }    return {        publicProperty: true,        publicMethod: function() {            privateVariable++;            return privateFunction();        }    };};

4.3 增強模組模式

var singleton = function() {    //私人變數和私人函數    var privateVariable = 10;    function privateFunction() {        return false;    }    //建立對象    var object = new CustomType();    //添加特權/公有屬性和方法    object.publicProperty = true;    object.publicMethod = function() {        privateVariable++;        return privateFunction();    };    //返回這個對象    return object;};

 

JavaScript函數運算式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.