企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
#### 问题一:值类型和引用类型的区别 (1)值类型(基本类型):字符串(String)、数值(Number)、布尔值(Boolean)、Null、Undefined 1、占用空间固定,保存在栈中 2、保存与复制的是值本身 3、使用typeof检测数据的类型 4、基本类型数据是值类型 var a = 1; var b = a; a = 2;console.log(b);//结果是1。b不会因为a改变而改变 (2)引用类型:对象(Object)、数组(Array)、函数(Function) 1、占用空间不固定,保存在堆中 2、保存与复制的是指向对象的一个指针 3、使用instanceof检测数据类型 4、使用new()方法构造出的对象是引用型 ``` var a = {age:20}; var b = a; b.age = 21; console.log(a.age) //21 var o = new Object(); function foo(obj) { obj.name = "xyc"; obj = new Object(); obj.name = "lxy"; } foo(o); console.log(o.name); //?? ``` 详解: 1.新建对象`var o = new Object();` 2.在foo的环境下执行`obj.name = "xyc"` 由于是参数传递,在局部作用域内相当于执行了`obj = o` 3.在局部作用域内新建对象,并赋值相同的属性值 4.foo()执行完毕,局部作用域出栈,obj声明周期结束 此时,新建的对象依然存在,等待下一次内存自动回收机制将堆中的无引用对象销毁。