ES6函数作用域的问题

chen_2016_web 2017-08-31 09:40:18

let k = 1;
function f(j = k){
let k = 2;
console.log(j)
}
f();

上面是第一段代码!

let foo ='outer';
function bar(func = x => foo){
let foo = 'inner';
console.log(func())
}
bar();

上面是另一段代码!

我先不说答案,如果你猜对了答案,我想知道,你们是怎么思考的?请使用作用域相关知识回答我,谢谢!
...全文
171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen_2016_web 2017-08-31
  • 打赏
  • 举报
回复
我现在糊涂了,经过测试,我使用ES6转ES5工具,在ES5的环境中,第一个例子输出1,第二个例子是inner。然后在ES6环境,本地的ES6环境可能有点问题吧,第一个例子输出是undefined,第二个例子是inner。我在书本上看见的,第一个例子是1,第二个例子是outter......三个完全不同的答案。按照我个人理论,我比较相信本地的ES6环境测试的结果,但是我更加相信ES6转ES5的运行结果,毕竟是Babel上面转换的,至于书本的,感觉年代久远了,可能存在某些失误,求解那个是正确的?我糊涂了!
chen_2016_web 2017-08-31
  • 打赏
  • 举报
回复
引用 1 楼 functionsub 的回复:
1跟outer 变量的值只在当前作用域生效,这有什么疑问吗? 第一个例子里,j默认值为k,f定义的时候作用域里有变量k,所以就是1了啊 第二个例子里,func为一个带x参数的函数,但是func的返回值是foo,func函数定义的时候当前作用域里也有个foo,值为outer。
第一个例子,控制台上输出是undefined。 第二个例子,控制台上输出是inner。
chen_2016_web 2017-08-31
  • 打赏
  • 举报
回复
引用 1 楼 functionsub 的回复:
1跟outer 变量的值只在当前作用域生效,这有什么疑问吗? 第一个例子里,j默认值为k,f定义的时候作用域里有变量k,所以就是1了啊 第二个例子里,func为一个带x参数的函数,但是func的返回值是foo,func函数定义的时候当前作用域里也有个foo,值为outer。
ES6入门这书上的答案是你所说的,但是实际上的结果不是这个。
functionsub 2017-08-31
  • 打赏
  • 举报
回复
1跟outer 变量的值只在当前作用域生效,这有什么疑问吗? 第一个例子里,j默认值为k,f定义的时候作用域里有变量k,所以就是1了啊 第二个例子里,func为一个带x参数的函数,但是func的返回值是foo,func函数定义的时候当前作用域里也有个foo,值为outer。

87,993

社区成员

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

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