函数内部引用类型的变量被外部使用,函数是否会释放?

  1. 函数内的变量赋值给外部
var global1
(function() {
    var a = {}
    var b = [1]
    global1 = b
})()
  1. 函数内部的变量返回给外部
var global2
global2 = (function() {
    var a = {}
    var b = [2]
    return b
})()

上述2个例子中的函数是否会释放,函数内部的a b 是否会释放?

另外,是否可以利用Chrome工具查看函数是否会释放?

谢谢大神们~

阅读 2.1k
2 个回答

chrome可以查看调用栈作用域对象:
image.png

变量ab都是函数内的局部变量,保存在栈内的(变量引用指向的值{}[2]保持在堆内的),函数执行完后变量本身就释放了。但是堆中的数据[2]由于被全局变量global1引用着 不会被回收

会释放吧 对象类型数据是在堆中分配内存的 变量b是在栈中创建的 保存的只是堆中数据的地址 函数执行完 栈会被释放 变量b就被回收了 但是堆中的数据由于被全局变量引用着 不会被回收

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题