关于函数参数的作用域
来源:2-11 函数的参数
 
			Panda_io
2020-08-20
let x =4
function foo(y=x){
let x = 2
console.log(y)
}
foo() //输出的是 4
老师原来function(y=x) 括号里面是单独的作用域呀?
我以为只有全局作用域,块级作用域,函数作用域,我以前一直以为()里面的参数是属于函数作用域,今天才发现并不是。
那老师这种function(y=x)叫做参数作用域吗?
关于arguments的补充
下面内容引用自红宝书第66页

上面描述改变参数值并不会改变arguments的值
但是输出结果出来却跟这句话是矛盾的
    function b(a,) {
        a = 10;
        console.log(arguments[0])
    }
    b(1) // 10
看了老师说的这个帖子,就发现我理解的raguments跟老师的实验有点偏差,接着回头再看红宝书,发现确实是红宝书错了。老师是它错了吗?
2回答
- 
				
				问题中红宝书的截图中红框的部分,不能说他是错的,只是没有把场景描述清楚,毕竟书是翻译过来的所以应该可以理解。 1、按照你的例子: function b(a) { 
 a = 10;
 console.log(arguments[0])
 }
 b(1) // 10按照你这个例子的话,貌似书里是错的。 别急,继续往下看: 2、我再举个例子: function fn(a, b){ b = 10; console.log(arguments[1]); } fn(1, 2); // 10 fn(1); // undefined 仔细看下我这个例子中两次调用有什么区别? 是传递参数个数的区别,如果实参个数 小于 形参个数,那么多出的形参和arguments会失去映射关系。 012020-08-21
- 
				  谢成 2020-08-21 建议可以看下这个帖子,里面有对这块知识的案例: http://coding.imooc.com/learn/questiondetail/201635.html 012020-08-21
相似问题
