1. 程式人生 > >es6 函式引數作用域

es6 函式引數作用域

函式的引數會形成一個單獨的作用域

//因為函式引數形成一個單獨作用域,所以foo的引數x和匿名函式中的x是處於同一個作用域中。foo函式內部使用的x就是引數x,給x賦值為3,但是後邊接著執行y(),修改x=2,所以最後輸出2
var x = 1;
function foo(x, y = function() { x = 2; }) {
  x = 3;
  y();
  console.log(x);
}

foo(); // 2


//下面例子中有3個作用域的x,
var x = 1;  //全域性
function foo1(x, y = function() { x = 2; }) {  //x是匿名函式的區域性變數
  var x = 3;  //函式foo1的區域性變數
  y();
  console.log(x);
}

foo1(); // 3



//本例子充分說明匿名函式內的x不能訪問函式foo1函式內的區域性變數x
var x = 1;
function foo1(x, y = function() { console.log(x); }) {
  var x = 3;
  y();
  console.log(x);
}

foo1(); // undefined 3


但是一定要注意,上面第三個例子中,在函式內部重複宣告引數,如果換成let來宣告是不對的。