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? 展开
v不是全局变量吗,a()中v不是先访问自身内部作用域然后会访问全局作用域吗,a()内部没有定义v那么不是会访问外部变量吗?那为什么打印出来的不是AAA? 展开
1个回答
展开全部
首先。你要知道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的执行过程。先编译。再执行。自己空间内有就不会去外面找。主要就是这样的。
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’赋值行为?
追答
对的。先创建空间。再赋值,都是从上到下的。还有一点就是现在自己的空间里面找是否有,没有去父级找。要是还没有就再往上一层。简单的说就是作用域链
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询