JavaScript中如何才能在外部访问到立即执行匿名函数中的变量和函数?

立即执行匿名函数中的变量和函数怎么访问?
图片说明
图片说明

如何才能在外部调用fn1()函数和fn2()函数

如何才能在外部访问到age变量
图片说明

图片说明

这是我的原贴

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript中立即执行的匿名函数</title>
<script type="text/javascript">
var hometown = '江西省赣州市于都县';
console.log(hometown);
(function (){
    console.log('我是一个匿名函数' + hometown);
})();

(function (){
    var age = 24;
    console.log('hello,我是一个匿名函数');
    function fn1(){
        console.log('我是fn1函数');
    }
    fn1();
    function fn2(){
        console.log('我是fn2函数');
    }
    fn2();
})();
//涉及到闭包的知识
//立即执行匿名函数中的变量和函数怎么访问?
//如何才能在外部调用fn1()函数和fn2()函数
fn1(); //报错Uncaught ReferenceError: fn1 is not defined
// fn2();
//如何才能在外部访问到age变量
// console.log(age); //报错Uncaught ReferenceError: age is not defined
</script>
<script type="text/javascript">
console.log('我的家乡在' + hometown);
</script>

</head>
<body style="background-color: #CCE8CF;">
    <h3 style="color: #cd1636;">
    JavaScript中立即执行的匿名函数
    </h3>
</body>
</html>

3个回答

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>JavaScript中立即执行的匿名函数</title>
        <script type="text/javascript">
            var hometown = '江西省赣州市于都县';
            console.log(hometown);
            (function() {
                console.log('我是一个匿名函数' + hometown);
            })();

             (function(){
                var exports={};
                var age = 24;
                console.log('hello,我是一个匿名函数');

                function fn1() {
                    console.log('我是fn1函数');
                }
                fn1();

                function fn2() {
                    console.log('我是fn2函数');
                }
                fn2();
                exports.efn1=function(){
                    return fn1();
                }

                window.exports=exports;
            })();
            //涉及到闭包的知识
            //立即执行匿名函数中的变量和函数怎么访问?
            //如何才能在外部调用fn1()函数和fn2()函数
            exports.efn1();
//          fn1(); //报错Uncaught ReferenceError: fn1 is not defined
            // fn2();
            //如何才能在外部访问到age变量
            // console.log(age); //报错Uncaught ReferenceError: age is not defined
        </script>
        <script type="text/javascript">
            console.log('我的家乡在' + hometown);
        </script>

    </head>

    <body style="background-color: #CCE8CF;">
        <h3 style="color: #cd1636;">
    JavaScript中立即执行的匿名函数
    </h3>
    </body>

</html>

把这个函数挂载到window对象上,外部就可以直接访问了

czh500
冷囧囧 非常感谢您,我用你的方法,自己测试了一下,确实达到了在外部访问立即执行匿名函数中的变量和函数的目的,我也是之前学习闭包的知识后,突发奇想,想着能不能在外部访问到立即执行匿名函数中的变量和方法,算是举一反三吧,谢谢您!
6 个月之前 回复

function fn1() 放到(function(){}())外就好了

这里面有个js代码执行顺序的问题

czh500
冷囧囧 谢谢,可是我是想测试如何才能在外部访问到立即执行匿名函数中的变量和函数
6 个月之前 回复

把参数返回出来赋值 就可以在外面调用

let dd = (function (){
    var age = 24;
    console.log('hello,我是一个匿名函数');
    function fn1(){
            console.log('我是fn1函数');
    }
    fn1();
    function fn2(){
            console.log('我是fn2函数');
    }
    fn2()
    return fn2
})() //匿名函数执行与否只跟最后有没有这个 '()'有关系

dd()

另外如果你想调用其他函数 就必须把它们的返回出来并赋值给某个变量,
你可以理解为 匿名函数内是一个封闭的小房子 如果你要别人能找到里面的东西只能递出一个纸条(也就是地址指针。return的 fn2 其实是fn2的指针,让拿到这个指针的可以调用fn2)。
如果这个函数运行结束里面的东西都没有跟外界有交互(也就是外界没有谁保存了里面东西的指针),里面的东西都会被销毁。
想要调用其他的函数 就要一起返回出去 或者 赋值给外面的变量

weixin_42731553
Kuukiliselessness 回复lay500: 回答我更新了,你看一下吧
6 个月之前 回复
weixin_42731553
Kuukiliselessness 回复lay500: 匿名函数执不执行 跟添加返回 并赋值给dd没有任何关系,(匿名函数)()
6 个月之前 回复
czh500
冷囧囧 这种办法,立即执行匿名函数还会立即执行吗?还有,你只返回了fn2函数,那fn1函数和age变量还是访问不到吧?
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐