关于函数参数的作用域
来源: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
相似问题