看《js设计模式》时,发现个问题…

2016/12 01 09:12
此文章不得转载,如有需要请联系网站管理员。

一度的温暖,一百度的爱情,来自于bwin2299必赢亚洲的点点滴滴

我看这里的时分 以为有个很奇特的中央:

var getSingle = function fn {
    var result;
    return function{
        return result ||  result = fn .applythis, arguments  ;
    }
};

在调用 getSingle的时分,每次调用 都市重新声明一个 var result 变量啊, 以是每次 result 都是个新的 空 呀,那后面的判别 就没意义了!!!是不是漏了个立即实行function{} 来包裹一下呀?

嗯 这书我也看过 《JavaScript设计形式与开辟实际》,单例形式那块儿。

真实这是一个闭包的题目

你看这一行

var createSingleLoginLayer = getSinglecreateLoginLayer

前往的这个 createSingleLoginLayer 函数一直援用了 result 变量。

因此假定 无论是 createSingleLoginLayerargs1 还是 createSingleLoginLayerargs2 真实result 变量历来都是那个一末尾那个 result .每次 result 不是空的。

说究竟,这便是个闭包的题目。

@499311496 说的是对的。
这个getSingle是把创立单例的办法也笼统出来,每次调用getSingle,result的确会被再创立一次。但是第二次创立的跟第一次是没有干系的。比如:

var createSingleLoginLayer = getSinglecreateLoginLayer

下面result被创立了一次,但是我是用于创立登录窗口的。我接着再运用:

var createSingleLogoutLayer = getSinglecreateLogoutLayer

result又被创立了一次,但是这个时分两个result也都是存在的,并且是纷比方样的。我如今即可以运用createSingleLoginLayer又可以运用reateSingleLogoutLayer。

题主说的没有题目,每次调用getSingle的时分都市重新声明一个result,但是书上没有写错,getSingle的作用并不是获得单例,而是获得消费单例的函数,createSingleIframe函数才是获得单例;每次运转createSingleIframe函数此中的result不会被重新声明,由于createSingleIframe函数每次实行的是前往的函数。

var createFrame = function{
    var iframe;
    return function {
        if!iframe {
            // 创立iframe
        }
        return iframe
    }
}

去失自实行函数

var test= function{
    var iframe;
    return function {
        if!iframe {
            // 创立iframe
        }
        return iframe
    }
} // test每次实行iframe都纷比方样但是它一次实行的值,一定是一样的,以是如下:
createFrame = test 
// createFrame每次实行运转的是test的前往值(函数),它获取的iframe应该是一样的,
// 这个test就和标题中的getSingle作用类似

持续改动运用getSingle

var getSingle = function fn {
    var result;
    return function{
    // 这个前往函数才是每次实行的函数,result的值在第一次确定之后就不会改动了
        return result ||  result = fn .applythis, arguments  ; 
        // 这里又反复了下面提到的见解,result = fn .applythis, arguments,
        // fn .applythis, arguments每次实行都是纷比方样的,
        // 但是result真实获取的某一次实行的值,这个是一样,以是每次获取的真实是分歧个值。
    }
};

说了这么多真实这个变化最主要的是理解:

var test1 = function {
    return test
}
test2 = test1 // test1是前往test,test2是实行test函数

每次调用getSingle都市创立result,这个result关于前往的函数来讲是独一存在的,
var fn = getSingleotherFn
这个fn一直可以拜访这个独一的result,

var fn2 = getSingleotherFn2
这个fn2也包装了一个result

闭包创立了一个前往函数的私有属性而已

(看完/读完)这篇文章有何感想! 来看看bwin2299必赢亚洲是怎么评论的吧!

--转载请注明: bwin2299必赢亚洲_www.bwin2299.com_bwin2299必赢亚洲世界顶级公司 » 看《js设计模式》时,发现个问题…

发表评论

(必填)