ES5和ES6

chen_2016_web 2017-08-31 11:25:38

//这是ES6里面的
let foo ='outer';
function bar(func = x => foo){
console.log(func()) //undefined?为何这里是undefined。使用let定义变量,不存在变量声明提升吧,这里为何会输出undefined?
let foo = 'inner';
console.log(func()) //inner
}
bar();


var foo = 'outer';
function bar() {
function func(x) {
return foo;
};
console.log(func()); //undefined,因为下面的变量(var foo = 'inner')声明提升导致这里输出undefined,我的解析对了吧?
var foo = 'inner';
console.log(func()); //inner
}
bar();
...全文
258 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen_2016_web 2017-09-03
  • 打赏
  • 举报
回复
引用 2 楼 Free_Wind22 的回复:
第一段输出2个outer, 你是假的ES6吧
如果改为,下面这样,我敢肯定,输出都是outer。

let foo ='outer';
let func = x => foo
function bar(){
    console.log(func()) //outer
    let foo = 'inner';
    console.log(func()) //outer
}
bar();
chen_2016_web 2017-09-03
  • 打赏
  • 举报
回复
引用 3 楼 zzgzzg00 的回复:
表示两个outer
何以见得?我把ES6转ES5,输出都是undefined和inner。如果输出都是outer,除非func是外层作用域所声明的变量。
chen_2016_web 2017-09-03
  • 打赏
  • 举报
回复
引用 2 楼 Free_Wind22 的回复:
第一段输出2个outer, 你是假的ES6吧
何以见得?我把ES6转ES5,输出都是undefined和inner。如果输出都是outer,除非func是外层作用域所声明的变量。
似梦飞花 2017-09-01
  • 打赏
  • 举报
回复
表示两个outer
2017-09-01
  • 打赏
  • 举报
回复
第一段输出2个outer, 你是假的ES6吧
chen_2016_web 2017-09-01
  • 打赏
  • 举报
回复
111111
75闪光雷 2017-09-01
  • 打赏
  • 举报
回复
不知道你想表达啥,不过我来打个酱油

87,993

社区成员

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

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