html - javascript 变量作用域
PHPz
PHPz 2017-04-10 14:47:57
[JavaScript讨论组]

代码如下

var a = 1;

function demo() {

   console.log(a); //undefined

   var a = 2;

   console.log(a); // 2

}

demo();

为什么第一个是 undefined 第二个是 2 ?

PHPz
PHPz

学习是最好的投资!

全部回复(5)
阿神

因为这一句:

var a = 2;

JavaScript 函数里的 var 声明执行时会被提升到函数的顶端,也就是说最终执行的代码不是:

console.log(a);
var a;
a = 2;

而是:

var a; // 这里的声明将外部作用域中的 a 声明覆盖掉了
console.log(a); // undefined
a = 2;

把那个 var 去掉就正常了。


文档:var hoisting

PHPz

你的代码等价于这个

var a = 1;

function demo() {

   var a = undefined;

   console.log(a); //undefined

   a = 2;

   console.log(a); // 2

}

demo();
大家讲道理

因为demo里面也定义了a啊……变量声明语句会先执行……

PHP中文网

因为第二个函数会先从局部作用哉开始查找。

怪我咯

可以这么解释,因为js有个预编译的过程,会把变量声明和函数声明提前到当前上下文的最前面。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号