js中有关作用域的一个小问题

YUHUI01 2017-12-27 07:18:30
代码如下
<script>
alert(fn1);
if(true){
function fn1(){
alert(123);
}
}
</script>

请问,为什么弹出来的提示是Undefined的?
能不能讲解一下
...全文
201 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
py-python 2017-12-28
  • 打赏
  • 举报
回复
因为alert(fn1);中的fn1 没有定义呀
遇见y2021 2017-12-28
  • 打赏
  • 举报
回复
函数是从上到下执行代码,你把alert(fn1),写在第一行,fn1是一个未定义的变量,所以值为undefiend,如果你把他加个括号,写成alert(fn1()),因为fn1()这个函数写在if的里面,会报错,像二楼所说,会报错,你如果把alert(fn1)写到最后一行,会弹出fn1这个函数,如果写成alert(fn1()),先运行fn1这个函数,如果fn1这个函数有返回值,会弹出返回值,如果没有,会弹出undefined <script> if(true){ function fn1(){ alert("123") var m=3 return m;//如果这行注释先弹出123,再弹出undefined,不注释先弹出123,再弹出3 } } alert(fn1()); </script>
天际的海浪 2017-12-27
  • 打赏
  • 举报
回复
因为函数声明提升特性只会在函数所在的语句区块{}内进行提升,不会提升到语句区块{}外 <script> alert(fn1); //输出undefined if(true){ alert(fn1); //输出function fn1..... function fn1(){ alert(123); } } </script>

87,910

社区成员

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

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