javascript - 变量只声明会被覆盖掉吗
高洛峰
高洛峰 2017-04-10 17:52:44
[JavaScript讨论组]
var a = 10;

function test () {
    a = 100;
    console.log(a);      //100
    console.log(this.a); //10
    var a;
    console.log(a);      //为什么这个最后也是输出10了,讲道理的话应该是undefined,就算被覆盖难道不是被100 覆盖吗
}
test();
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(5)
伊谢尔伦

var a = 10;

function test () {
    a = 100;
    console.log(a);      //100
    console.log(this.a); //10
    var a;
    console.log(a);      //为什么这个最后也是输出10了,讲道理的话应该是undefined,就算被覆盖难道不是被100 覆盖吗
}
test();
VM9973:6 100
VM9973:7 10
VM9973:9 100

楼主提问题之前不运行一下函数吗?最后一个明明打印出100的,这样容易给人误解的,自己都没研究过?

PHP中文网

变量提升所致,相当于如下代码

function test() {
    var a = 100;
    console.log(a);
    console.log(this.a);
    console.log(a);
}
迷茫

var a那句让a变成了局部变量,你的最后那个console.log(a)返回的应该是100才对,你是不是看错了。。。囧

高洛峰

楼主提问题之前不运行一下函数吗?最后一个明明打印出100的,这样容易给人误解的,自己都没研究过?

阿神

楼主的代码粘的有点乱,我第一次看错了...

先上百科:
过程体(包括方法function,对象Object o ={})外的所有变量不管你有没有加var保留字,他都是全局变量
而在过程体内(包括方法function(){},对象Object o={})内的对象加var保留字则为局部变量,而不加var保留字即为全局变量

第一行的var a = 10; 是全局变量
调用test函数的上下文环境即Window
console.log(this); //Window
在函数内部,由于变量提升,var a;这行相当于在最前面,所以函数内部的a是局部变量.

就是说楼主的代码中,有一个全局变量a和一个局部变量a;
全局变量a = 10;
局部变量a = 100;

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

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