首页 > 试题广场 >

执行下列代码,输出结果为()

[单选题]
执行下列代码,输出结果为()
var val = 12;
function fun1(){
    console. log(val);
    var val = 20;
    console.log(val);
}
fun1();

  • 12  20
  • 12  12
  • undefined  20
  • 20  undefined
var val = 12;
function fun1(){
    var val;
    console. log(val); //undefined
    val = 20;
    console.log(val); //20
}
fun1();

变量声明提升,所以第一次输出是undefined,赋值了后输出是20
发表于 2021-12-01 16:45:12 回复(0)
多了个空格
发表于 2019-03-20 10:34:06 回复(2)
var val = 12;
function fun1(){
    console. log(val); // 函数声明提升
    var val = 20;
    console.log(val);
}
fun1();


发表于 2021-09-13 20:07:16 回复(0)
就近原则,JS会优先调用函数里的变量,当未定义时会输出undefined(不像java中自动检测未定义,出现编译异常)
发表于 2021-03-05 23:16:34 回复(0)
函数会优先找自己的内部变量,var变量提升,val == undefined;
编辑于 2019-10-09 22:04:39 回复(1)

js里有域的概念,函数外边的是全局值,在fun1函数里是局部域,可以读取外部变量,但是这个局部域里又重新定义,就不会再读取外部,覆盖

发表于 2019-10-08 00:21:42 回复(0)
变量提升,赋值语句不提升
var val = 20 等价于 var val ,val = 20
所以第一个console.log(val)只能读取到val而读取不到20
发表于 2019-08-15 15:26:14 回复(4)
这里涉及到JS中的提升机制以及词法作用域的相关知识。
在函数fun1中声明的变量val会被提升到函数头部,但是赋值操作并不会被提升,同时fun1作用域内的val会替换掉全局作用域中的val。
因此,题目中的代码实际上为
var val = 12;
function fun1(){
    var val;
    console.log(val); //为赋值undefined
    val = 20; //在原位置对变量进行赋值操作
    console.log(val); //输出20
}
fun1();


发表于 2020-11-28 16:46:43 回复(0)
变量申明提升,代码等价
	
var val =12;
function fun1(){
   var val;
   console. log(val);
   val =20;
   console.log(val);
}
fun1();

发表于 2019-03-24 19:59:28 回复(0)
函数内部已经定义了变量val,根据就近原则,是不会去取外面的val值的。 函数内部的变量声明提升,赋值不提升。所以第一个是undefined,第二个是20。
发表于 2022-01-25 19:20:37 回复(0)
变量的使用遵循就近原则上述函数内部代码提升后如下
function fun1(){
    var val
    console. log(val);
    val = 20;
    console.log(val);
}
所以是undefined,20


发表于 2020-07-28 11:36:54 回复(0)
函数会优先找自己内部变量,函数里面的var变量提升到函数最前面,代码相当于
var val = 12;
function fun1(){
    var val;
    console.log(val);
    var val = 20;
    console.log(val);
}
fun1();

编辑于 2021-11-17 18:05:04 回复(0)
var val = 12;
function fun1(){
    console. log(val);
    var val = 20;
    console.log(val);
}
fun1();
绕了半天才绕明白这个题, 考点在两点:
1. 函数内部作用域
2. 变量的提升
因为函数内部存在了val , 所以外部的那个全局val就不会起作用了, 这是作用域是问题导致的
之后是变量的提升, 函数内部的代码
    console. log(val);
    var val = 20;
    console.log(val);
实际上执行的时候是这样的
var val;
console. log(val);
val = 20;
console.log(val);
所以答案是c  这题可以的, 有点东西

发表于 2020-11-18 10:09:06 回复(0)
局部变量的优先级比全局变量的优先级更高,val有变量提升
发表于 2022-09-06 22:29:13 回复(0)
变量提升但是值不会提升
发表于 2022-07-26 22:32:49 回复(0)
当局部变量和全局变量同时存在时,局部变量的优先级更高。
发表于 2022-07-11 16:56:14 回复(0)
这道题考察的是变量提升,函数内声明的变量只会提升至该函数作用域的最顶层
发表于 2022-01-30 10:56:07 回复(0)
函数提升优先级高于普通变量提升
发表于 2021-09-02 09:18:55 回复(0)
函数内有声明提前
发表于 2021-08-30 15:01:00 回复(0)
go 和 ao的问题。因为函数内的变量是var声明,所以会变量提升,函数内第一个log的val是undefined,如果是用let声明,则会报错,不能在未声明前调用
编辑于 2021-08-12 09:54:24 回复(0)