关于 是否是每次new object(函数),就会重复生成一个“函数”内容放在新创建引用地址上?

<script>
    function fn1(){alert(1)}
    var p1=  fn1;
    var p2=  fn1;
    console.log(p1==p2)//true问题1、是否说明fn1把内容和地址分别给了p1和p2,所以两种比较相等
</script>
<script>
    function fn1(){alert(1)}
        var p1= new fn1;//此处我只是多加了一个new为什么函数就开始被执行
        var p2= new fn1;;//此处我只是多加了一个new为什么函数就开始被执行
        console.log(p1==p2)//false问题2,并且p1,p2就不相等了,原因是new创建本身在内存中生成一个新的引用地址的原因吗?

</script>
阅读 3.4k
3 个回答

问题1:
在JS中,对象和函数是引用类型,也就是说,它们在赋值给其它变量时,只是把它自己的引用地址赋值给其它变量,而不是新建一个对象或函数。

问题1,可以解释为,p1p2都只是被赋值了函数fn1的引用地址,所以,他们的值是相等的。


问题2:

第二个例子中,fn1是被当做一个对象。当执行下面这两句时:

var p1= new fn1;
var p2= new fn1;

会对对象fn1进行初始化,也就说p1p2是对象fn1的实例,当对象被初始化为实例时,是会先执行对象的。至于,什么是对象?什么是实例?请自行搜索查询解释。

所以,p1p2是对象的两个不同的实例,是不同的东西,不相等。

把你的例子简化到如下应该好理解点

var obj = {a:1};

var b1 = obj;
var b2 = obj;

var o1 = {a:1};
var o2 = {a:1};

console.log(b1==b2)//true  相当于第一种 
console.log(o1==o2)//false 相当于第二种
推荐问题
宣传栏