关于对象创建和作用域的问题

1.如下代码:

 <script>
        var ok = (function () {
            var b = {
                a: 1,
                c: function () {

                }
            };
            return b;
        })()
       var n= ok;
       var p= ok;
    </script>

我的理解不知道正不正确,这个ok()执行两次,每次都是一个立即执行函数,然后里面有一个立即执行函数的局部变量b,每次赋值为一个对象b={},相当于每一次都创建了一个新对象然后把里面的局部变量指向了这个新对象,相当于在堆内存里面有两个对象,这两个对象是独立的个体?

阅读 1.9k
3 个回答

立即执行函数理解的不对。后面是对的,每次都是创建一个新对象,这两个是独立的。

立即执行函数是定义后就立即执行,形式如(fuction(){})(),你这不是。
var b相当于建立了一个全局的空指针,然后每次执行ok()就把堆内存中新建的对象{a: 1,c: function () {}}绑定到b上,每次新建堆内存分配的地址都不一样,所以b每次都是独立的。

你这代码能跑吗老哥?首先ok被定义为一个立即执行的函数返回的对象b,ok即是对象b。ok无法执行

推荐问题