JavaScript函数内部修改全局变量的问题

代码如下,为什么加了functiona(){};这个函数,就不能改变全局变量a的值了?vara=1;functionb(){a=2;console.log(a);//有函... 代码如下,为什么加了 function a(){};这个函数,就不能改变全局变量a的值了?
var a = 1;
function b(){
a = 2;
console.log(a);
//有函数,a不变;没函数,a变2
function a(){};
}
b();//输出2
console.log(a);//输出1
展开
 我来答
xi8km9
2016-12-10 · TA获得超过1086个赞
知道小有建树答主
回答量:688
采纳率:50%
帮助的人:722万
展开全部
因为
A. JavaScript中函数就斗孙是一种值而已, 与数字对象字符串等都是值
B. JavaScript会预解析整个代码後执行, 其中一点是会把function FunctionName(){}这种形式的函数声明带态亮定义预先绑定到其所在的作用域
所以, 你的b函数函数体空闭链等价於
function b()
{
function a(){}

a = 2

console.log(a)

}
因此不会改变全局的值
更多追问追答
追问
感谢回复,B中的函数声明提前我了解一些,倒是A给我很大启发。你的意思是,变量a=2其实是把函数a()重新赋值成数字变量了?那么函数a()可以看成是一个局部变量,a=2虽然前面没有加var,但也只是给a()这个局部变量重新赋值,但a依然是一个局部变量,只是与函数外面的全局变量a=1重名,这样理解对吗?
追答
'变量a=2其实是把函数a()重新赋值成数字变量了?'

正确
'但a依然是一个局部变量,只是与函数外面的全局变量a=1重名'

正确
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式