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

資訊專欄INFORMATION COLUMN

幾道JS閉包題目

joy968 / 759人閱讀

摘要:每個函數在被調用時都會自動取得兩個特殊變量和。把外部作用域中的對象保存在一個閉包能夠訪問到的變量中,就可以讓閉包訪問該對象了這個函數會返回一個函數數組,表面上看,每個函數都應該返回自己的索引值,但實際上每個函數都返回。

function fun(n,o) {
   console.log(o);
   return {
      fun:function(m){
      return fun(m,n);
    }
  };
}


三個fun函數是一樣的嗎?


第一個fun是具名函數,可通過fun.name得到"fun",即函數名;返回值是一個對象字面量表達式,屬于一個新的Object;

對象字面量里有一個叫fun的屬性,該屬性是一個匿名函數表達式,屬于新創建的函數,所以第一個和第二個fun函數是不一樣的;

匿名函數表達式又返回一個fun函數,我們可以知道這個函數肯定不是新創建的,那么它是指的第一個還是第二個呢?

這就涉及到函數作用域鏈的問題了。

全局環境中有一個函數fun(),fun()的局部環境中沒有變量,所以第三個fun在局部環境中查詢不到,就會向上查找,即在全局環境中找到。

所以第三個和第一個是同一個。

var name = "The Window";
var object = {
    name: "My Object";
    getName: function(){
        return function(){
            return this.name;
        };
    }
};
alert(object.getName()()); //"The Window"

每個函數在被調用時都會自動取得兩個特殊變量:this和arguments。內部函數在搜索這兩個變量時,只會搜索到其活動對象為止,因此永遠不可能直接訪問到外部函數中的這兩個變量。

var name = "The Window";
var object = {
    name: "My Object";
    getName: function(){
        var that = this;  //把外部作用域中的this對象保存在一個閉包能夠訪問到的變量中,就可以讓閉包訪問該對象了
        return function(){
            return this.name;
        };
    }
};
alert(object.getName()()); //"My Object"

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

這個函數會返回一個函數數組,表面上看,每個函數都應該返回自己的索引值,但實際上每個函數都返回10。因為每個函數的作用域鏈中都保存這createFunction()函數的活動對象,所以它們引用的都是同一個變量i。當createFunction()函數返回后,變量i的值是10,此時每個函數都引用者保存變量i的同一個變量對象,所以在每一個函數內部i的值都是10.

function createFunction(){
    var result = new Array();
    
    for(var i=0;i<10;i++){
        result[i] = function(num){
            return function(){
                return num;
            };
        }(i);
    }
    
    return result;  //可以返回各自不同的數值了
}

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

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

相關文章

  • 閉包及跨域相關幾道

    摘要:題目一題目什么是閉包,為什么要用它網址博客題目二題目的實現原理網址題目三題目是什么的交互模型同步和異步的區別如何解決跨域問題網址題目四題目如何解決跨域問題網址題目五題目原生封裝處理兼容網址 題目一:題目:什么是閉包(closure),為什么要用它?網址:http://bbs.daxiangclass.com/?...博客:https://www.jianshu.com/p/6fa......

    idealcn 評論0 收藏0
  • 開開心心做幾道JavaScript機試題 - 01

    摘要:碰到這種面試官,你只有是個題霸,再加上眼緣夠才能順利入圍。只要按照我題目的思路,甚至打出來測試用例看看,就能實現這個題目了。答案根據的,對答案做出修正。另我的答案絕不敢稱最佳,隨時歡迎優化修正。但了解總歸是好的。 我們在長期的面試過程中,經歷了種種苦不堪言,不訴苦感覺不過癮(我盡量控制),然后主要聊聊常見JavaScript面試題的解法,以及面試注意事項 憶苦 面試第一苦,面試官的土 ...

    liujs 評論0 收藏0
  • 前端最強面經匯總

    摘要:獲取的對象范圍方法獲取的是最終應用在元素上的所有屬性對象即使沒有代碼,也會把默認的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對于一個光禿禿的元素,方法返回對象中屬性值如果有就是據我測試不同環境結果可能有差異而就是。 花了很長時間整理的前端面試資源,喜歡請大家不要吝嗇star~ 別只收藏,點個贊,點個star再走哈~ 持續更新中……,可以關注下github 項目地址 https:...

    wangjuntytl 評論0 收藏0
  • 通過幾道題目學習二叉搜索樹

    摘要:根據這個特征,用二分法來將有序數組轉換為一顆二叉搜索樹。邊界條件向下取整得到中間值遞歸二分法接下來我們驗證下一棵樹是否滿足二叉搜索樹。二驗證二叉搜索樹相關題目驗證二叉搜索樹中等思路就是,中序遍歷如果滿足遞增的就行。 二叉樹大家都知道,二叉搜索樹滿足以下特征: 節點的左子樹只包含小于當前節點的數節點的右子樹只包含大于當前節點的數 所有左子樹和右子樹自身必須也是二叉搜索樹 二叉搜索樹也叫...

    Steven 評論0 收藏0
  • 讓我印象深刻的javascript面試題

    摘要:前言對于一個前端來說,面試的時候,難免會遇到的面試題。有幾道面試題,有些是我面試遇到的,有些是在網上看到的,但是都印象深刻。 1.前言 對于一個web前端來說,面試的時候,難免會遇到javascript的面試題。就我自己而言。有幾道面試題,有些是我面試遇到的,有些是在網上看到的,但是都印象深刻。今天就來簡單分析一下我遇到的,印象深刻的一些面試題!主要目的希望能讓小伙伴學到一些東西,如過...

    Pink 評論0 收藏0

發表評論

0條評論

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