js 函数 输出结果

clipboard.png
输出结果为什么是undefined。主要考察的是哪方面的知识?

阅读 3.2k
5 个回答

题主需要了解变量声明提升的相关概念。

相当于

var foo = 123;
(function(){
var foo;
console.log(foo);
foo = foo || 'name'
}())

泻药,楼上已回答了的

这是声明提升,hositing

差不多就是在一个作用域内,你在中间var声明了一个变量什么的,实际上会把var xx提升到最前面去,比如在你的代码了,实际上就是

var foo=123;
(function(){
    var foo;//var声明被提前了
    console.log(foo);//所以这里不会访问到外部的123,而是因为访问内部的foo,但还没到赋值阶段,所以undefined
    foo = foo || 'name';
})()

百度搜:js 变量提升

Google搜:js variable hoisting

大概就是说var所定义的变量会提升到作用域最开始。

// your code
var a = 1;
var fn = function () {};

JS引擎在解析运行时会变成:

var a, fn;
// your code
a = 1;
fn = function () {};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题