首页 > 试题广场 >

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

[单选题]
以下代码执行后,输出结果为()
var a = 10;
function a(){}
console.log(typeof a)


  • “number”
  • “object”
  • “function”
  • “undefined”
函数提升优先级高于变量提升,所以代码等价于
function a(){}
var a;
a = 10;
console.log(typeof a)


发表于 2019-08-21 16:35:49 回复(14)
var a=10; function a(){} console.log(typeof a);
函数提升大于变量提升,变量提升会提升到除函数声明的后面;变量提升,但是赋值不提升、函数表达式亦是如此,所以我觉得应该是下面的步骤  function a(){} var a;
a=10;//如果没有这一步赋值操作的话,类型还是function console.log(typeof a);//a=10 number
这边不是因为什么之后重声明才变为number,是因为变量赋值才变的
如果有多个var a ,那a的类型最后就会是最后赋值操作的参数类型。
如果有什么不对的地方,欢迎大家指出说的不到位或者有错的地方。   

发表于 2019-08-27 22:34:55 回复(0)
这一题我选错了。
我来写一下理解后的思路:首先使用var声明变量会造成变量提升,毫无疑问变量a会被置于代码块顶部,但是下方使用function关键字声明了函数a,函数声明也会提升至代码块顶部,而且优先级更高。
所以实际代码等价于
function a () {}
var a
a = 10
console.log(typeof a)
变量a会覆盖函数a,输出结果为number。
那如果这里使用关键词let呢,代码变为
let a = 10
function a () {}
console.log(typeof a)
这里明显会报错。前面提到,函数声明会优先于变量声明,会被提升至代码块顶部,所以会先声明function a ,再执行let a = 10;,但是a已被声明过,不能再使用let 关键字进行重声明。所以这里应当注意函数声明提升的问题,即便let声明变量的语句被置于代码块顶部,但是需要注意函数声明提升。


发表于 2020-04-26 11:20:35 回复(3)
变量提升优先级高于函数提升。变量提升之后,但其赋值还是留在原本的位置。所以代码等价于
var a;
function a(){};
typeof a; //function
a= 10; 
typeof a; //number

console.log(typeof a)


注意:let和const关键字声明的变量不会被提升,函数提升只会提升函数声明,而不会提升函数表达式

发表于 2020-01-13 15:20:05 回复(4)
函数提升优先级高于变量提升

发表于 2019-08-03 13:44:47 回复(3)
下面很多说变量提升在后是错的:
应该是:
变量提升大于函数声明提升。
var a; 
functiona(){};
a =10;
typeof a;   // number
发表于 2020-03-12 13:00:19 回复(0)
先提升var关键字,此时a为underfined,再提升function,此时重名,a的值为f a(){},再执行代码,a又被赋值为10,所以typeof a为number
发表于 2022-01-26 16:40:29 回复(0)
函数提升优先级高于变量提升,且不会被变量声明覆盖,但会被变量赋值覆盖。(手机码字,对不起。。。) ------------------fun a(){} var a; console.log(typeof a) //function------------------var c=1; fun c( c ){console.log( c ) } c( 2 ) //c is not a function------------------>相当于是fun c(){ } var c //c此时还是一个函数 c=1 c(2)
发表于 2021-09-16 09:33:47 回复(0)
变量提升优先级高于函数提升,
var a = 10
function a(){}
console.log(typeof a)
相当于
var a
function a(){} // 在这一步a已经变成函数了
a = 10 // 赋值的过程中a变成number类型
console.log(typeof a)

如果修改为
var a
function a(){}
console.log(typeof a) //结果为function
通过这个就能判断是变量提升优先级高于函数提升了
发表于 2020-08-16 10:30:27 回复(2)
该题用到的知识点为变量提升和预解析js 解析时的每一步得到的结果为:① Var a;② function a {}; var a ;(变量提升)③ function a {}; var a; a=10; console.log(a); (得到输出a=10)).
发表于 2021-03-20 19:54:09 回复(0)
<p>我觉得准确的说法是 变量和函数都会被提升到最上面 但是二者同名的话 函数会覆盖变量</p><p><br></p>
发表于 2020-10-10 20:56:26 回复(0)
前提是你不要在控制台逐行输入这三行代码,那样绝对不会出现变量提升。
发表于 2020-03-17 20:49:44 回复(0)
console.log(a);        //funtion
var a = 10;
console.log(a);        // a = 10
function a() { }
console.log(typeof a)    //number
综上。可知函数提升优先级大于变量提升的优先级,number 类型的 a覆盖了函数类型的 a 所以结果为 nunber
var a = 10;
    ||
var a;
a = 10;
所以 console.log(a) 结果为10

发表于 2019-11-12 10:57:00 回复(0)
函数提升要比变量提升的优先级要高一些,且不会被变量声明覆盖,但是会被变量赋值之后覆盖。
发表于 2019-10-30 15:49:00 回复(0)
console.log(typeof a)//输出fucntion
var a = 10;
function a(){}
console.log(typeof a)//输出number

//相当于
var a 
function a(){}
console.log(typeof a)
a = 10
console.log(typeof a)
变量的提升的优先级>函数声明的优先级
发表于 2019-08-27 16:10:08 回复(2)
是因为function a会被提升到最上方,然后才是var a = 10这个环节
发表于 2022-11-07 23:45:18 回复(0)
会报错吗这不是
发表于 2022-10-02 16:32:38 回复(0)
说下我的思路
变量声明首先先会被提升,变量的赋值被留在了原地,然后函数在提升。这里的提升是提升到作用域(函数作用域、全局作用于)的最顶部
var a = 10;
function a(){}
console.log(typeof a)
```js
var a = undefined;
function a(){}
a = 10;
console.log(typeof a);
```

看好多回答说的是先函数提升,虽然最后的结果是一样的,但顺序不对呀!! 

啊 还是我的理解是错的??
发表于 2022-03-06 19:56:58 回复(1)
纠正一下函数提升的优先级是大于变量提升的
console.log(typeof a)        //这里的输出为function     如果变量提升优先级高这里应该是undefined
var a = 10;
function a(){}
发表于 2024-03-16 15:26:39 回复(0)
函数提升优先级高于变量提升,且不会被同名变量声明覆盖,但是会被变量赋值后覆盖。
所以执行顺序大致是
function a(){};
var a;
a=10;

发表于 2022-10-14 17:06:50 回复(1)