84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
1.没弄懂js的执行顺序,执行下面代码,刚开始alert的时候,a还没有声明,不是应该直接报错吗?为什么先是显示这个function,然后显示10,显示3,最后还报错了?不是一开始就应该报错了吗?
alert(a) a(); var a=3; function a(){ alert(10) } alert(a) a=6; a()
问了下同学,知道了为什么会出现那样的情况,首先要明白的概念1.js中,变量声明和函数声明是会提前的,并且函数声明会优于变量声明。所以,在声明a之前alert(a),并不会报错。以及,第一个alert,出现的是a这个function,并不是变量a。2.第二个alert,无需多言,只是执行a这个函数。3.第三个alert,结果是3,因为运行到了这里之前,执行了var a=3;。所以a变成了3。var a=3;。所以a变成了3。4.最后报错是因为,执行到a();a进行了两次赋值,第一次是var a=3;,第二次是a=6;4.最后报错是因为,执行到a();a进行了两次赋值,第一次是var a=3;,第二次是a=6;,但是无论怎样,a都不是函数,所以报错了。
var a=3;
a=6;
第一个输出function是因为作用域提升(hoisting)。第二个输出 10 是第二行a()的输出。第三个输出 3 是倒数第三行alert(a)的输出。最后一个报错是来自最后一行a()。因为这时候a被重新赋值为数字6,已经不是function了。执行a()当然会报错。
function
a()
alert(a)
a
6
变量声明提升么,记住下面几条规则就好了。
http://zonxin.github.io/post/...
问了下同学,知道了为什么会出现那样的情况,首先要明白的概念
1.js中,变量声明和函数声明是会提前的,并且函数声明会优于变量声明。所以,在声明a之前alert(a),并不会报错。以及,第一个alert,出现的是a这个function,并不是变量a。
2.第二个alert,无需多言,只是执行a这个函数。
3.第三个alert,结果是3,因为运行到了这里之前,执行了
var a=3;
。所以a变成了3。var a=3;
。所以a变成了3。4.最后报错是因为,执行到a();a进行了两次赋值,第一次是
var a=3;
,第二次是a=6;
4.最后报错是因为,执行到a();a进行了两次赋值,第一次是var a=3;
,第二次是a=6;
,但是无论怎样,a都不是函数,所以报错了。第一个输出
function
是因为作用域提升(hoisting)。第二个输出 10 是第二行
a()
的输出。第三个输出 3 是倒数第三行
alert(a)
的输出。最后一个报错是来自最后一行
a()
。因为这时候a
被重新赋值为数字6
,已经不是function
了。执行a()
当然会报错。变量声明提升么,记住下面几条规则就好了。
http://zonxin.github.io/post/...