javascript - 匿名函数中的变量怎样能在外部获取到?
大家讲道理
大家讲道理 2017-04-10 17:45:27
[JavaScript讨论组]

!function 匿名函数中的变量怎样能在外部获取到?

代码:

!(function (w) {
    var a = {
        itemId:1,
        adtype:2,
        device:2
    }
    if (window.adlist) {
        w.adlist.push(a);
    }
})(window)

对方说可以拿到,类似面试题;菜鸟看不懂如何才能在外部拿到里面的a;求大神。

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(7)
黄舟
var adlist = [];

!(function (w) {
    var a = {
        itemId:1,
        adtype:2,
        device:2
    }
    if (window.adlist) {
        w.adlist.push(a);
    }
})(window)

console.log(adlist[0]);
黄舟

window对象属于全局作用域,可以直接在JS的函数里调用,不需要传参(JS里数组和对象传参时默认是引用传递),除非你想要使用别名,比如jQuery插件常见的写法:
(function($){/*这里可以使用$这个jQuery别名*/})(jQuery);

高洛峰

如果可以修改匿名函数内部的代码就简单了。

!(function (w) {
    var a = {
        itemId:1,
        adtype:2,
        device:2
    }
    if (window.adlist) {
        w.adlist.push(a);
    }
    
    window.a = a;
})(window);

把a这个变量直接绑定到window上面,这个类似jq的全局绑定方法。
至于"!function"这个说法是不规范的,匿名函数本身和!没有关系,像"!"、"+"这两个运算符的作用是将function解析成表达式让浏览器进行一些优先处理,有时也用来防止js压缩产生歧义。

伊谢尔伦

没搞懂你为什么要加!,害我看了好一会以为是什么诡异的题。。

黄舟

从代码看,应该在window下有adlist全局变量,其实更安全的方法是

!(function () {
    var a = {
        itemId:1,
        adtype:2,
        device:2
    }
    if (typeof window.adlist == "undefined") { //判断是否已经全局存在adlist,否则就建立
        window.adlist=[];
    }
    window.adlist.push(a);
})()
迷茫

你在外部建立一个adlist,在里面push进去,外部就可以获取到了。
只不过我也没看懂为什么有一个!

PHPz

在window对象上面有一个adlist属性 属性值为一个空数组,把匿名函数里面的变量放在数组里面就行了 这个! 应该没用把,后面本来就是一个自执行的匿名函数了

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

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