javascript - 求解释这段代码,尤其是两个return
ringa_lee
ringa_lee 2017-04-11 11:41:21
[JavaScript讨论组]
var createIframe=(function(){
    var iframe;
    return function(){
        if(!iframe){
            iframe=document.createElement('iframe');
            iframe.style.display='none';
            document.body.appendChild(iframe);
        }
        return iframe;
    }
})();
ringa_lee
ringa_lee

ringa_lee

全部回复(2)
PHP中文网

这是一个高阶函数,它返回一个函数,它返回的函数的返回值是 iframe
这样形成了一个闭包,保存了iframe的值,不必每次计算;

这样看:

var createIframe=(function(){
    var iframe;
    var r = function(){
            if(!iframe){
                iframe=document.createElement('iframe');
                iframe.style.display='none';
                document.body.appendChild(iframe);
            }
            return iframe;
        };
    return r;
})();

补充:

最外层右半部份是一个立即执行的函数:


var createIframe = (function(){...})();

//相当于
function temp(){
    ...
}
var createIframe = temp();

再补充:
每次使用 createIframe 变量时,使用的其实是这一段代码:

function(){
    if(!iframe){
        iframe=document.createElement('iframe');
        iframe.style.display='none';
        document.body.appendChild(iframe);
    }
    return iframe;
};

这段代码有一个作用域,就是外层function的内部,它声明了一个iframe变量,这个变量会随内层的function一起保存,不会清除

当第一次执行代码,会向 <body> 中增加一个 <iframe> ,返回这个引用,并把它保存在iframe变量中,
iframe变量会一直保存在内存中,不被清除
以后执行代码时,首先判断 iframe 是否存在,如果存在,则直接返回其引用,不再创建新的<iframe>

高洛峰

除了那两个return,还有最后那个();

这里形成了一个闭包环境,通常在不想使用全局变量的时候,会采取这种方式。

先从全局变量的方式去理解。

var iframe;
var createIframe=function(){
    if(!iframe){
        iframe=document.createElement('iframe');
        iframe.style.display='none';
        document.body.appendChild(iframe);
    }
    return iframe;
}

我想这个createIframe方法很好理解,就是只创建一个iframe对象(有单实例的味道)。

其实,return不用多解释。无非就是将值返回给调用者仅此而已。

最后那个()表示该方法会被立即执行,所以createIframe方法的实际处理过程就是return function(){}那部分。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号