题目
var x = 1;
function f(x, y = function () { x = 3; console.log(x); }) {
console.log(x)
var x = 2
y()
console.log(x)
}
f()
console.log(x)
// //1、上面的代码输出的是什么?
// //2、如果把var x = 2注释掉,输出的又是什么?
// //3、如果把f函数第一个参数x改成xx,输出的又是什么?
// //4、如果把f函数第一个参数x设置了默认值为4,输出的又是什么?
上述代码输出结果为:undefined、3、2、1,参数y函数里x = 3其实改变的是f函数的 参数x,而不是全局x或者f函数内部x
分析(函数的参数作用域!!)
var x = 1;
function f(x, y = function () { x = 3; console.log(x); }) {
console.log(x) // 参数x没有默认值,所以:undefined
var x = 2
y() // 改变的是参数x,且输出参数x,所以:3
console.log(x) // 输出的是局部x,所以:2
}
f()
console.log(x) // 全局x无影响,所以:1