首页 > 试题广场 >

下面的代码输出结果为: var foo = 1; func

[单选题]
下面的代码输出结果为:
var foo = 1;
function baidu(){
    console.log(foo);
    var foo = 2;
    console.log(foo);
}
baidu();
  • undefined 2
  • undefined undefined
  • 1 2
  • 2 2
变量提升,用var声明的变量,声明会被提升到函数的顶部或全局作用域的顶部。
发表于 2018-07-11 17:19:10 回复(0)
更多回答
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部”,注意,“只有声明的变量会提升,初始化的值却不会。
则:
function baidu(){
    console.log(foo);
    var foo = 2;
    console.log(foo);
}
相当于
function baidu(){
     var foo;  //提升到函数最顶部
     console.log(foo);  //输出未定义
     foo =2; 
     console.log(foo); //输出2
}


发表于 2018-07-17 09:07:06 回复(2)
考察知识点是变量提升,http://www.runoob.com/js/js-hoisting.html
在函数里面定义了 var foo =2;函数内部发生变量提升;函数内部的变量提升是提升到函数头部,所以在函数的最顶端有var foo = undefined;执行第一个console.log(foo)的时候,是undefined,执行console.log(foo)的时候已经给foo赋值了,所以是2,函数执行时变量先从函数内部找,找不到才会继续向父元素寻找;例如:var foo1=3;function f1(){console.log(foo1)};f1()//3
发表于 2018-07-11 10:40:34 回复(0)
var foo = 1;
function baidu(){
    console.log(foo);
    var foo = 2;
    console.log(foo);
}
baidu();
上面说了,容易误解这么说吧。
”JavaScript 中,函数及变量的声明都将被提升到函数的最顶部”,注意,“只有声明的变量会提升,初始化的值却不会。”
则:
var fff = 1;
function baidu(){
    console.log(foo);
    var foo = 2;
    console.log(foo);
}
baidu();
相当于
var fff = 1;
function baidu(){
    var foo;
    console.log(foo);
    foo = 2;
    console.log(foo);
}
baidu();
发表于 2019-03-30 16:17:28 回复(0)
这题最上面那个var foo=1 不就是声明了全局产量吗?为什么第一个console的时候不能用吗 不懂
发表于 2019-02-28 18:26:14 回复(1)