关于js的function参数的作用域

如题:

var x = 1;

function foo(a,b=function(){x=2}) {

  var x = 3;

  b()

  console.log(x)

}

foo()

console.log(x)

// 打印 3 2

其实可以写成这种格式,比较好理解:

var x = 1;

var defaultB = function() { x = 2 };

function foo(a, b = defaultB) { var x = 3; b(); console.log(x) };

foo();

console.log(x);

defaultB是定义在全局上下文的,所以它内部的x,应该是来自于全局作用域,而不是foo的作用域。

所以b(也就是defaultB)执行会改变全局作用域的x变量。

posted @ 2020-12-30 10:48  悟空不争宠  阅读(135)  评论(0)    收藏  举报