2021.11.17函数的参数作用域

109 阅读1分钟

题目

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