JavaScript函数内部修改全局变量的问题【一道面试题】
2016-12-10 22:34
295 查看
JavaScript函数内部修改全局变量的问题
分享| 今天 10:44梵天莲华 | 浏览 23 次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的面向对象
- JavaScript学习笔记4--对象
- 浅谈JavaScript的arguments和this对象
- Java 和JavaScript语法不一样的地方
- 《JSON必知必会》
- javascript笔记图
- JSP和Servlet的区别
- js闭包和循环
- Javascript的事件机制
- javascript闭包
- 如何在统计图超链接里调用JavaScript函数
- JavaScript字符串常用方法小结
- JavaScript数组知识点小结
- js-JavaScript高级程序设计学习笔记14
- 分享一个百度的接口地址可以用来测试json数据用
- javascript学习(六)函数
- javascript学习之判断字符串
- HTML、XML、CSS、JavaScript、JSP注释详解
- jsp对输入项的内容进行校验的思路
- js闭包中注意文字总结