Discuss / JavaScript / 为什么返回值是**red**而不是*blue*?

为什么返回值是**red**而不是*blue*?

Topic source

var color = 'blue'; function changecolor () {

if (color === 'blue') {
    color = 'red';
} else{
    color = 'green';
}

} changecolor(); console.log(color);//red 为什么返回值是red而不是blue

gakkilovers

#2 Created at ... [Delete] [Delete and Lock User]

因为console输出的是全局变量color,在函数中已经修改了

MJ-浣

#3 Created at ... [Delete] [Delete and Lock User]

changecolor()函数里面做了判断 修改了color的值啊

如果这样写,color就不会变 var color="blue"; function changecolor(color){ if(color=="blue"){ color="red"; } else{color="green";} } changecolor(color); console.log(color); 因为函数传递参数是按值传递的。

搜寻参数的机制是first local then global, 如果local没找到则到global中找。

  • 如果函数parameter中没有定义color,函数中使用的color的值就是从global获取的“blue”;
  • 如果函数parameter中定义了color,这就相当于新建了一个local变量,在怪兽兄例子中,该parameter is initialized, but hasn't been assigned a value, 此时color的值是undefined。

槲寄君

#6 Created at ... [Delete] [Delete and Lock User]

@低调的Liangliang 楼上有误吧,怪兽说的是没有错的,在chanecolor函数中color的值是red,在外层是blue,你先运行一遍再来解答啊。。。

theway85958

#7 Created at ... [Delete] [Delete and Lock User]

我寻思,人也没说怪兽兄弟说错了呀。俩人的解答都没毛病吧?

可以这样理解吗?

顶层对象color是blue,无参函数执行改变了顶层对象所以打印red;

若是有参函数调用执行改变函数内部变量color,与顶层对象color无关,所以执行完函数,在函数外打印color还是blue~


  • 1

Reply