发新贴  快速回复

作用域提升问题

白小菜
2014-12-02 15:18
例子1:
var a = 1;
function b(){
     alert(a)
}
b()
a = 2;
// 1

var a;
function b(){
     alert(a)

b()
a =1
a = 2
//2

function b(){
     alert(a)
}
b()
var a=1
//undefine
问题:
[list=1]
[*]当b这个函数创建完成时会发生什么。
[*]当b这个函数被调用的时候会发生什么.
[/list]
无为
你这上面的代码应该是两个不同的例子吧? 如果只有一个例子的话,最后一个alert() 弹出的应该是2,而不是 undefined。

2014-12-02 15:56  回复本帖
白小菜
forum.php?mod=redirect&goto=findpost&pid=33142&ptid=10606
你这上面的代码应该是两个不同的例子吧? 如果只有一个例子的话,最后一个alert() 弹出的应该是2,而不是 u ...

en ..3个不同的例子
2014-12-03 11:15  回复本帖
无为
forum.php?mod=redirect&goto=findpost&pid=33194&ptid=10606
en ..3个不同的例子

其实弄清楚两点:
1,变量声明和函数的定义会被预解析。
 预解析是指浏览器在读取页面的时候,会先把页面中的所有变量的声明(注意只是声明,赋值还是在代码原来的位置不变),和函数的定义提前在当前作用域的最顶端来进行解析。

2,js的作用域是函数作用域。
   函数的里面和函数外面之间存在作用域,函数里面可以访问函数外面定义的变量或函数,而函数外面访问不了函数里面定义的变量或函数。

另外,如果没有流程控制语句(视频中有讲)的干扰,js代码始终是从上到下一行一行执行代码的。

接下来看看你这三个例子:

例1 
var a = 1;
function b(){
     alert(a)
}
b()
a = 2;
// 1经过预解析之后,这段代码实际执行效果应该是这样:
var a;这样就可以很清楚地知道,函数b里面是可以访问到变量a的,而调用函数b是在给 a 赋值 1 之后、赋值2之前,所以执行b函数时,a还是1。

例2
var a;
function b(){
     alert(a)

b()
a =1
a = 2
//2这个就更好理解了,代码预解析之前跟之前的顺序是一样的,这个例子不同的只是给a赋值的顺序,在调用函数b时,下面的两行赋值还没有被读取到,也就是还没有给变量a赋任何值,那a的值自然就是声明时的默认值:undefined

例3
function b(){
     alert(a)
}
b()
var a=1
//undefine经过预解析之后的实际执行顺序:
var a;执行顺序和结果跟例2是一样的,都是 undefined 。




2014-12-03 16:43  回复本帖
123307870
var a;
function b(){
     alert(a)

b()
a =1
a = 2



这个弹出来是2吗?你测试一下试试。
2014-12-03 17:16  回复本帖
创美易-miaov
forum.php?mod=redirect&goto=findpost&pid=33202&ptid=10606
var a;
function b(){
     alert(a)


御姐析的时候 a 默认是undefine , a 赋值的时候还是在原来的位置, 不变,  b 函数调用的时候是在赋值前,  所以弹出 a 是 undefine.

2014-12-03 17:54  回复本帖
a22193650
forum.php?mod=redirect&goto=findpost&pid=33201&ptid=10606
其实弄清楚两点:
1,变量声明和函数的定义会被预解析。
 预解析是指浏览器在读取页面的时候,会先把页面 ...

那个流程控制语句是什么?您在哪个视频里面有讲到
2014-12-08 10:00  回复本帖
无为
forum.php?mod=redirect&goto=findpost&pid=33403&ptid=10606
那个流程控制语句是什么?您在哪个视频里面有讲到

js基础课的视频,vip群里有下载。
2014-12-08 15:55  回复本帖
a22193650
forum.php?mod=redirect&goto=findpost&pid=33422&ptid=10606
js基础课的视频,vip群里有下载。

请问怎么才能进入vip群里下载,是要报名吗
2014-12-09 09:16  回复本帖
创美易-miaov
forum.php?mod=redirect&goto=findpost&pid=33445&ptid=10606
请问怎么才能进入vip群里下载,是要报名吗

VIP报名找小美.
QQ:1146531423
2014-12-09 09:46  回复本帖
登录 后才可以发表回复