首页 > 代码库 > JavaScript函数内部修改全局变量的问题【一道面试题】
JavaScript函数内部修改全局变量的问题【一道面试题】
JavaScript函数内部修改全局变量的问题
| 浏览 23 次 今天 10:44梵天莲华
Javascript编程语言函数 修改标签
代码如下,为什么加了 function a(){};这个函数,就不能改变全局变量a的值了?
var a = 1;
function b(){
a = 2;
console.log(a);
//有函数,a不变;没函数,a变2
function a(){};
}
b();//输出2
console.log(a);//输出1
今天 11:07
提问者采纳
因为
A. JavaScript中函数就是一种值而已, 与数字对象字符串等都是值
B. JavaScript会预解析整个代码後执行, 其中一点是会把function FunctionName(){}这种形式的函数声明带定义预先绑定到其所在的作用域
所以, 你的b函数函数体等价於
function b()
{
function a(){}
a = 2
console.log(a)
}
因此不会改变全局的值
追问:
今天 11:44
感谢回复,B中的函数声明提前我了解一些,倒是A给我很大启发。你的意思是,变量a=2其实是把函数a()重新赋值成数字变量了?那么函数a()可以看成是一个局部变量,a=2虽然前面没有加var,但也只是给a()这个局部变量重新赋值,但a依然是一个局部变量,只是与函数外面的全局变量a=1重名,这样理解对吗?
追答:
今天 11:52
‘变量a=2其实是把函数a()重新赋值成数字变量了?‘
正确
‘但a依然是一个局部变量,只是与函数外面的全局变量a=1重名‘
正确
追问:
今天 12:47
好的,非常感谢!
JavaScript函数内部修改全局变量的问题【一道面试题】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。