函数类型的变量
来源:15-1 变量类型和计算-1
玥玥颜
2019-02-12
var a = function(){console.log(111)};
var b =a;
修改a的函数体
a = function(){console.log(112)};
再次打印a的结果是:
ƒ (){console.log(112)}
再次打印b的结果如下:
ƒ (){console.log(111)}
既然函数属于引用类型,为什么当变量a改变时变量b没有跟着改变呢?试过对象,数组都是可以的
写回答
2回答
-
因为a指向了一个新的函数,而b还是指向原来的函数。
我们通常在对象中是这样应用的:var a = {x: 1} var b = a a.x = 2 console.log(b) => {x:2}这时,a依然指向原来的对象。但是,当:
var a = {x: 1} var b = a a = {y:1} console.log(a) => {y:1} console.log(b) => {x:1}这时,a指向了新的对象。你的例子同理。
012019-02-14 -
AqingCyan
2019-02-13
函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其他变量没有什么不同。换句话说,一个函数可能有多个名字
function sum(num1, num2){ return num1 + num2; } alert(sum(10, 10)); // 20 var anotherSum = sum; alert(anotherSum(10, 10)); // 20 sum = null; alert(anotherSum(10, 10)); // 20以上代码首先定义了一个名为sum()的函数,用于求两数之和,然后又声明了变量anotherSum,并且把其值设为何sum一样,那么实际上是把指向sum函数的指针赋值给anotherSum,anotherSum和sum都指向同一个函数,而后,sum赋值为null,就是sum指针断开了与函数的关系,所以anotherSum能正常调用函数。
那么你的问题就很显而易见了,你将a = function(){console.log(112)};实际上是将a指针指向了新的函数,所以b不影响调用原来的函数。
30
相似问题