!function 匿名函数中的变量怎样能在外部获取到?
代码:
!(function (w) {
    var a = {
        itemId:1,
        adtype:2,
        device:2
    }
    if (window.adlist) {
        w.adlist.push(a);
    }
})(window)
对方说可以拿到,类似面试题;菜鸟看不懂如何才能在外部拿到里面的a;求大神。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
window对象属于全局作用域,可以直接在JS的函数里调用,不需要传参(JS里数组和对象传参时默认是引用传递),除非你想要使用别名,比如jQuery插件常见的写法:
(function($){/*这里可以使用$这个jQuery别名*/})(jQuery);如果可以修改匿名函数内部的代码就简单了。
把a这个变量直接绑定到window上面,这个类似jq的全局绑定方法。
至于"!function"这个说法是不规范的,匿名函数本身和!没有关系,像"!"、"+"这两个运算符的作用是将function解析成表达式让浏览器进行一些优先处理,有时也用来防止js压缩产生歧义。
没搞懂你为什么要加!,害我看了好一会以为是什么诡异的题。。
从代码看,应该在window下有adlist全局变量,其实更安全的方法是
你在外部建立一个adlist,在里面push进去,外部就可以获取到了。
只不过我也没看懂为什么有一个!
在window对象上面有一个adlist属性 属性值为一个空数组,把匿名函数里面的变量放在数组里面就行了 这个! 应该没用把,后面本来就是一个自执行的匿名函数了