在预解析下,函数和变量都会发生提升,且函数提升在变量提升之前

执行以下程序,输出结果为()

var a = 100;
function a(){
  var a = 200;
  console.log(a);
}

a();

A
100

B
200

C
抛出异常

D
f a(){var a = 200;console.log(a);}

正确答案:C

在预解析下,函数和变量都会发生提升,且函数提升在变量提升之前,
故在全局作用域下,a首先被定义为函数变量,接着又被覆盖为一个数值型,然后再调用函数a,显然会抛出异常,原因是a已经不再是函数。
在函数内部,还存在着局部变量a,但它对函数外部的变量不会产生影响

函数提升优先级高于变量提升,且不会被同名变量声明覆盖,但是会被变量赋值后覆盖

由于作用域提升,a首先被定义为函数变量,接着又被声明为一个变量,变量被赋值为一个数值型,然后再调用函数a,显然会抛出异常,原因是a已经不再是函数

posted @ 2023-11-13 15:11  龙陌  阅读(13)  评论(0)    收藏  举报