国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

通俗的講一下 閉包

lookSomeone / 1036人閱讀

摘要:閉包是指有權訪問另一個函數作用域中的變量的函數。創建閉包的常見方式,就是在一個函數內部創建另一個函數。而此時我們嘗試在返回之前更改得到證明。我們一般讓其返回一個函數,是希望這個閉包能按照我們的預期進行。

閉包是指有權訪問另一個函數作用域中的變量的函數。創建閉包的常見方式,就是在一個函數內部創建另一個函數。

常見閉包出現的問題

function createFunction(){
            var result = new Array();
            for(var i=0; i<10; i++){
                result[i] = function(){
                    return i;
                }
            }
            console.log("i 的值:"+ i)
            return result;
        }

createFunction() 返回的結果

當我們調用 createFunction()[1]();時返回的是

事實上arr的每一項調用的結果都是10

為什么呢?

事實上你在調用每一項時,其實是這樣的

function childFunction(){
           var i = 10;
            return function(){
                return i;
            }
        }

這個 i 來自它的父級作用域

或者我們這么說,return i; 中的 i 跟 for循環中的 i 其實是不一樣的。因為此時的

函數并沒有調用,而當你調用的時候,它才去作用域鏈搜索 i 的值。而此時 i = 10;

我們嘗試在返回之前更改 i =9999;

得到證明。

那么要怎樣才能讓它返回我們預期的那樣呢?
我們只要把 result [i] 中的 i 當做參數傳進函數

result[i] = (function(num){
            return function(){
                return num;
            }
        })(i)

這一段代碼到底發生了什么?我們讓 外層 的函數傳入參數并立即執行,此時里面的 num 等于傳入的參數, 等到最內層函數調用的時候,它會拿到外層的num。

最后,很多人以為閉包指的是一個函數被一個函數返回,其實不是。它指的是 有權訪問另一個函數作用域中的變量的函數,跟是不是被 返不返回并沒有關系。我們一般讓其返回一個函數,是希望這個閉包能按照我們的預期進行。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95031.html

相關文章

  • 淺談js中的閉包

    摘要:對于一個個剛剛接觸前端的新手,天天聽人講閉包,聽的那個高大尚,心中對各位技術大佬是那個的膜拜,于是做為前端菜鳥的我,就去了解了傳說中的閉包。 對于一個個剛剛接觸前端的新手,天天聽人講閉包,聽的那個高大尚,心中對各位技術大佬是那個的膜拜,于是做為前端菜鳥的我,就去了解了傳說中的閉包。 何為閉包?通俗易懂的講,就是可以調用函數內部的變量和方法 舉例說明如下: function t...

    kumfo 評論0 收藏0
  • 這篇文章只簡單通俗的講單例模式

    摘要:設計模式得存在讓系統代碼可重用可擴展可解耦更容易被人理解且保證代碼可靠性。設計模式使代碼真正工程化。設計模式是一個龐大而又復雜的體系,單例模式大概是種設計模式中相對比較簡單的一種。了解完高階函數可能加快我們理解設計模式喲 showImg(https://segmentfault.com/img/bVbgyeK?w=500&h=375); 設計模式得存在讓系統代碼可重用、可擴展、可解耦、...

    姘擱『 評論0 收藏0
  • 初探面向對象編程之oop與設計模式

    摘要:為什么要采用面向對象編程解決問題更容易設計計算機程序就是為了解決人類的問題。面向對象編程需要對業務及代碼的架構是有一定的要求的。 1. 編程方式 我們目前的編程方式大體可以有以下三種編程方式: 順序編程 過程式編程 面向對象編程 在講面向對象編程時先講一下什么是順序編程,什么是過程式編程,什么是面向對象編程: 順序編程: 就是只用一個單線程去執行一段代碼,執行過程根據代碼依次從上...

    BingqiChen 評論0 收藏0
  • 自調用匿名函數(匿名閉包)解析與調用

    摘要:打開源碼,首先你會看到這樣的代碼結構這是一個自調用匿名函數。模式,是自執行函數的高級模式,可以非常方便的在各個匿名閉包中以全局對象調用閉包函數。 打開jQuery源碼,首先你會看到這樣的代碼結構: (function(window,undefined ){ // })(); 這是一個自調用匿名函數。什么東東呢?在第一個括號內,創建一個匿名函數;第二個括號,立即執行 為什么要創建這樣一個...

    Scorpion 評論0 收藏0
  • 淺談 OOP JavaScript [完結章] -- 繼承

    摘要:構造函數通過原型繼承了構造函數和原型,這就形成了一個鏈條,通俗的講就是原型鏈繼承。而且方法只能冒充構造函數里面的屬性和方法而無法冒充原型對象里面的屬性和方法還有最大的問題就是重復使用。 前言: 寫到這里,差不多就把OOP完結了,寫了幾篇OOP的文章,但是只是略懂皮毛,可能深入的OOP還有很多,但是我感覺寫到這里也算是差不多完結了。 繼承 繼承是面向對象比較核心的概念,其他語言可能實現...

    張利勇 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<