ES6作用域的问题

chen_2016_web 2017-08-31 09:37:01

var x = 1;
function f(){
console.log(x)
}
f()
//第一段代码,输出结果显然是1



var a = 5;
var b = 6;
function fcc(c = a+b){
console.log(c);
}
fcc() //输出结果为:11



var x = 1;
function f(x,y = x){
console.log(x) //输出结果undefined
console.log(y) //输出结果undefined
}
f()

第一段代码,会输出1是显然的。
第二段代码,既然输出的是11,那为何第三段代码的x输出结果不是1?y的输出结果不是1?
...全文
157 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
生如夏花bld 2017-08-31
  • 打赏
  • 举报
回复
变量的搜索原则先搜索函数本身的作用域,当在自己的作用域中搜索不到函数变量时,再向外部作用域扩展,直到全局作用域。 上面第三段代码中,声明了局部变量x,但是没有初始化,所以为undefined,也不会去搜索外部作用域。所以x和有都为undefined。
天际的海浪 2017-08-31
  • 打赏
  • 举报
回复
第三段代码,因为你函数内已经声明了一个x变量(参数),函数调用时是先在自己作用域内找x,由于函数内声明了一个x,就直接找到了。 只有在自己作用域内没有找到x,才向外层作用域内找
似梦飞花 2017-08-31
  • 打赏
  • 举报
回复
第二段代码等同于 function fcc(m){ let c; c=m===undefined? a+b:m; console.log(c); } 所以是11 同理 第三段代码等同于 var x = 1; function f(x1,y1){ let x=x1; let y=y1===undefined?x:y1; } 正好函数内定义的x覆盖了全局的x

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧