一个javascript的问题
PHP中文网
PHP中文网 2017-04-11 12:15:35
[JavaScript讨论组]
myname = "global"; // 全局变量
function func() {
    alert(myname); // "undefined"
    var myname = "local";
    alert(myname); // "local"
}
func();

我想知道为什么结果是这样的?

这段代码相当于下面这样吗?

myname = "global"; // 全局变量
function func() {
    var myname;
    alert(myname); // "undefined"
    myname = "local";
    alert(myname); // "local"
}
func();
PHP中文网
PHP中文网

认证0级讲师

全部回复(4)
巴扎黑

的确是相当与这样的,使用 var 关键字定义的变量,会被提升到作用域顶部,但是赋值操作不会被提升到顶端

大家讲道理

对的,声明提升。
变量声明提升

PHP中文网

你的相当于是对的。
在JavaScript中所有在作用域中var声明的变量会自动提升到该作用域的顶部。不过ES6中let声明变量是不存在声明提升的。
至于没有打印global就是作用域链的问题了,在作用域链上寻找变量值,作用域类的值是在作用域链前端的,而全局变量在作用域链的最后。当找到了值就不会在往下继续寻找了。所以,值一般不赋在window对象上,因为查值更耗费时间。

怪我咯

这个就叫做变量声明提前

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

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