js关于变量的问题 var v = 'AAA'; function a(){ alert(v); var v = 'BBB'; }; a();

为什么alert出来的是undefined,而不是AAA?v不是全局变量吗,a()中v不是先访问自身内部作用域然后会访问全局作用域吗,a()内部没有定义v那么不是会访问外... 为什么alert出来的是undefined,而不是AAA?
v不是全局变量吗,a()中v不是先访问自身内部作用域然后会访问全局作用域吗,a()内部没有定义v那么不是会访问外部变量吗?那为什么打印出来的不是AAA?
展开
 我来答
sososo的解答
推荐于2016-07-09 · 提供各种美女图片欣赏
sososo的解答
采纳数:142 获赞数:735

向TA提问 私信TA
展开全部
首先。你要知道JS的一个执行过程。首先他是先创建空间,然后才是赋值。还有一点就是在寻找值的时候。会现在自己的空间内查找。要是有的话。输出自己空间的值。没有的话。往父级查找。行程作用域链,也就是说。
var v = 'AAA'; //全局变量

function a(){
alert(v);

var v = 'BBB'; 局部变量

};

a();
这段代码在开始执行的时候是先创建了空间。 也就是var function var 然后是执行。执行是从上到下的。也就是说先给全局的v赋值为AAA 。。然后执行了alert这时候在函数a之中有变量v的空间。这时候弹出v。但是这个时候a函数里面的v还没有赋值。所以alert弹出的是undefined。

要是写成下面的代码
var v = 'AAA'; //全局变量

function a(){
var v = 'BBB'; 局部变量
alert(v);

};
a();

就会弹出 BBB

要是写成
var v = 'AAA'; //全局变量

function a(){
alert(v);

};
a();
弹出的就是AAA

总的来说就是一个JS的执行过程。先编译。再执行。自己空间内有就不会去外面找。主要就是这样的。
追问
“然后执行了alert这时候在函数a之中有变量v的空间” 这里的“v的空间”是指var v = 'BBB'; 创建的空间吗? 

也就是a()函数中先创建了v的空间,然后再按顺序执行了alert和v = ‘BBB’赋值行为?
追答
对的。先创建空间。再赋值,都是从上到下的。还有一点就是现在自己的空间里面找是否有,没有去父级找。要是还没有就再往上一层。简单的说就是作用域链
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式