es6 函式引數作用域
阿新 • • 發佈:2019-02-12
函式的引數會形成一個單獨的作用域
//因為函式引數形成一個單獨作用域,所以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來宣告是不對的。