为什么输出的是10,undefined,6呢?

为什么输出的是10,undefined,6呢?

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Document</title>

</head>

<body>

<script>

(function(){

a=10;

console.log(a);

console.log(window.a);

var a=6;

console.log(a);

})();

</script>

</body>

</html>


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,外面使用了立即执行函数,说明a是局部变量。

函数内部预解析的时候,用var定义的变量a提升赋值为undefined,然后从上到下执行代码,a赋值为10,所以第一次输出的a值为10 。接着输出window.a(window相当于访问全局变量),window对象中没有a属性,所以结果是undefined,最后a被赋值为6,所以输出a的结果是6 。

自己可以理解一下过程,祝学习愉快!

  • 芥子1204 提问者 #1
    a为什么是局部变量呢?不是没有使用var吗?就是因为立即执行了函数?
    2019-04-17 14:25:57
  • 好帮手慕星星 回复 提问者 芥子1204 #2
    一方面是使用了立即执行函数,另一方面是因为下面a变量用var声明了,在预解析的时候a就是局部变量了,尽管开始a没有用var声明。如果把下面var a=6;中var去掉,那么a就是全局变量了。
    2019-04-17 14:35:27
  • 芥子1204 提问者 回复 好帮手慕星星 #3
    哦,懂了 ,谢谢回答
    2019-04-17 14:39:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师