搜索
javascript - 执行这段代码,输出什么结果。
高洛峰
高洛峰 2017-04-10 15:44:56
[JavaScript讨论组]

function test() {
console.log(a);
console.log(foo());
var a = 1;
function foo() {
return 2;
}
}
test();

高洛峰
高洛峰

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

全部回复(6)
怪我咯

我觉得题主估计是要问为什么a为undefined,而函数却输出值2了。
这里涉及变量对象,进入函数上下文时a和foo被放到变量对象中,相当于初始化。
规定中:
函数声明:按名称和对应值(函数对象function-object)的形式创建变量对象的属性;
变量声明:按名称和对应值(undefined)的形式创建变量对象的属性。
所以原函数相当于:

function test() { 
    var a = undefined; 
    function foo() { 
        return 2; 
    }
    
    console.log(a); 
    console.log(foo()); 
    
    a = 1; 
} 
test();

所以输出了undefined和2。
被顶成-2?帮忙顶回去吧,这题并不是没有意义的题,涉及变量对象和执行上下文,要是函数和变量同名,情况又变了,个人愚见,不喜勿喷,这里本来就是问问题的地方。。

大家讲道理

undefine
2

ringa_lee
function test() { 
    console.log(a); 
    console.log(foo()); 
    
    var a = 1; 
    
    function foo() { 
        return 2; 
    }
} 
test();

理清楚就简单了,首先console.log(a)var a解析为undefined,所以输出undefined

console.log(foo())输出函数的返回值无疑问,是js的预解析,了解一下

天蓬老师

输出结果:

undefined
2

But why? 因为JavaScript有个Just In Time Compilation,所以实际上代码运行时并非完全你看到的这个样子,它会被"预编译"成以下样子:

function test() {
    function foo() {
        return 2;
    }
    var a;
    console.log(a);
    console.log(foo());
    a = 1;

}
test();

是否好理解了?

怪我咯

自己实验一下,F12打开,在控制台输入你上述代码,运行就看到结果了.

天蓬老师

输出

undefined
2

第一个简单,因为a根本没有定义,所以undefined
第二个,function会提前声明,所以在调用foo()的时候,foo已经声明好了,如果是foo()则是调用foo,输出结果2,如果是foo则输出function foo(){return 2;}

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

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