成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

幾道JS閉包題目

joy968 / 765人閱讀

摘要:每個(gè)函數(shù)在被調(diào)用時(shí)都會(huì)自動(dòng)取得兩個(gè)特殊變量和。把外部作用域中的對(duì)象保存在一個(gè)閉包能夠訪問(wèn)到的變量中,就可以讓閉包訪問(wèn)該對(duì)象了這個(gè)函數(shù)會(huì)返回一個(gè)函數(shù)數(shù)組,表面上看,每個(gè)函數(shù)都應(yīng)該返回自己的索引值,但實(shí)際上每個(gè)函數(shù)都返回。

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

問(wèn)
三個(gè)fun函數(shù)是一樣的嗎?


第一個(gè)fun是具名函數(shù),可通過(guò)fun.name得到"fun",即函數(shù)名;返回值是一個(gè)對(duì)象字面量表達(dá)式,屬于一個(gè)新的Object;

對(duì)象字面量里有一個(gè)叫fun的屬性,該屬性是一個(gè)匿名函數(shù)表達(dá)式,屬于新創(chuàng)建的函數(shù),所以第一個(gè)和第二個(gè)fun函數(shù)是不一樣的;

匿名函數(shù)表達(dá)式又返回一個(gè)fun函數(shù),我們可以知道這個(gè)函數(shù)肯定不是新創(chuàng)建的,那么它是指的第一個(gè)還是第二個(gè)呢?

這就涉及到函數(shù)作用域鏈的問(wèn)題了。

全局環(huán)境中有一個(gè)函數(shù)fun(),fun()的局部環(huán)境中沒(méi)有變量,所以第三個(gè)fun在局部環(huán)境中查詢不到,就會(huì)向上查找,即在全局環(huán)境中找到。

所以第三個(gè)和第一個(gè)是同一個(gè)。

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

每個(gè)函數(shù)在被調(diào)用時(shí)都會(huì)自動(dòng)取得兩個(gè)特殊變量:this和arguments。內(nèi)部函數(shù)在搜索這兩個(gè)變量時(shí),只會(huì)搜索到其活動(dòng)對(duì)象為止,因此永遠(yuǎn)不可能直接訪問(wèn)到外部函數(shù)中的這兩個(gè)變量。

var name = "The Window";
var object = {
    name: "My Object";
    getName: function(){
        var that = this;  //把外部作用域中的this對(duì)象保存在一個(gè)閉包能夠訪問(wèn)到的變量中,就可以讓閉包訪問(wèn)該對(duì)象了
        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;
}

這個(gè)函數(shù)會(huì)返回一個(gè)函數(shù)數(shù)組,表面上看,每個(gè)函數(shù)都應(yīng)該返回自己的索引值,但實(shí)際上每個(gè)函數(shù)都返回10。因?yàn)槊總€(gè)函數(shù)的作用域鏈中都保存這createFunction()函數(shù)的活動(dòng)對(duì)象,所以它們引用的都是同一個(gè)變量i。當(dāng)createFunction()函數(shù)返回后,變量i的值是10,此時(shí)每個(gè)函數(shù)都引用者保存變量i的同一個(gè)變量對(duì)象,所以在每一個(gè)函數(shù)內(nè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;  //可以返回各自不同的數(shù)值了
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80474.html

相關(guān)文章

  • 閉包及跨域相關(guān)幾道

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

    idealcn 評(píng)論0 收藏0
  • 開(kāi)開(kāi)心心做幾道JavaScript機(jī)試題 - 01

    摘要:碰到這種面試官,你只有是個(gè)題霸,再加上眼緣夠才能順利入圍。只要按照我題目的思路,甚至打出來(lái)測(cè)試用例看看,就能實(shí)現(xiàn)這個(gè)題目了。答案根據(jù)的,對(duì)答案做出修正。另我的答案絕不敢稱最佳,隨時(shí)歡迎優(yōu)化修正。但了解總歸是好的。 我們?cè)陂L(zhǎng)期的面試過(guò)程中,經(jīng)歷了種種苦不堪言,不訴苦感覺(jué)不過(guò)癮(我盡量控制),然后主要聊聊常見(jiàn)JavaScript面試題的解法,以及面試注意事項(xiàng) 憶苦 面試第一苦,面試官的土 ...

    liujs 評(píng)論0 收藏0
  • 前端最強(qiáng)面經(jīng)匯總

    摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒(méi)有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來(lái)而只能獲取元素屬性中的樣式。因此對(duì)于一個(gè)光禿禿的元素,方法返回對(duì)象中屬性值如果有就是據(jù)我測(cè)試不同環(huán)境結(jié)果可能有差異而就是。 花了很長(zhǎng)時(shí)間整理的前端面試資源,喜歡請(qǐng)大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...

    wangjuntytl 評(píng)論0 收藏0
  • 通過(guò)幾道題目學(xué)習(xí)二叉搜索樹(shù)

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

    Steven 評(píng)論0 收藏0
  • 讓我印象深刻的javascript面試題

    摘要:前言對(duì)于一個(gè)前端來(lái)說(shuō),面試的時(shí)候,難免會(huì)遇到的面試題。有幾道面試題,有些是我面試遇到的,有些是在網(wǎng)上看到的,但是都印象深刻。 1.前言 對(duì)于一個(gè)web前端來(lái)說(shuō),面試的時(shí)候,難免會(huì)遇到j(luò)avascript的面試題。就我自己而言。有幾道面試題,有些是我面試遇到的,有些是在網(wǎng)上看到的,但是都印象深刻。今天就來(lái)簡(jiǎn)單分析一下我遇到的,印象深刻的一些面試題!主要目的希望能讓小伙伴學(xué)到一些東西,如過(guò)...

    Pink 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<