JavaScript函数内部修改全局变量的问题【一道面试题】
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
提问者采纳
因为
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重名' 正确
好的,非常感谢!
JavaScript函数内部修改全局变量的问题【一道面试题】的更多相关文章
- javascript——函数内部属性
<script type="text/javascript"> //在函数内部有两个特殊的属性:arguments 和 this.arguments是一个类数组对象,包 ...
- 在函数中修改全局变量的值,需要加global关键字
一.引用 使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字.如: #! /usr/bin/python a = 1 b = [2, 3] def func(): if ...
- Python3基础 global 在函数内部对全局变量进行修改
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- 改变javascript函数内部this指针指向的三种方法
在查了大量的资料后,我总结了下面的三条规则,这三条规则,已经可以解决目前我所遇到的所有问题.规则0:函数本身是一个特殊类型,大多数时候,可以认为是一个变量. function a() { alert( ...
- 【原创分析帖】据说Google内部有史以来最难的一道面试题
逛技术平台的时候,刷到一道算法题,一眼看去,就被其开头吸引了: 摘自知乎某 Google 分布式大神的一道题,技术是Google内部出的有史以来最难的一道题 嗯,距离下班还有一段时间,就看看把. 题目 ...
- 嵌套函数变量修改nonlocal & 全局变量修改global
前几天在做一个简单的界面,单击Radiobutton保存字符串,在一个嵌套函数里面修改外部函数.一直不知道怎么修改,上网查了一下,搜关键字“嵌套函数修改变量”,找了好久,才得以解决. 对于python ...
- global关键字修改全局变量
#我们知道全局变量在函数外部,强烈建议不要在函数内部修改全局变量,正常情况下,在函数内部改变全局变量并不影响全局变量的值,举例如下 count = 5 >>> def myfun() ...
- JavaScript 函数——语法,调用,返回值,局部变量,全局变量,未声明变量
JavaScript 函数是被设计为执行特定任务的代码块. JavaScript 函数会在某代码调用它时被执行. ㈠函数 ⑴什么是函数 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. ⑵ ...
- 深入理解javascript函数参数与闭包(一)
在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...
随机推荐
- iOS:关于UIView切角的两种实现方式
转载自:http://www.jianshu.com/p/451b7fa94e2a 第一种: 我想你一见到代码,就瞬间有吐的冲动,最常用的一种方式... UIButton *button = [[UI ...
- Python学习:python网址收集
Python学习网址收集: 语法学习:http://www.cnblogs.com/hongten/tag/python/ http://www.liaoxuefeng.com ...
- Parallax Occlusion Mapping in GLSL [转]
http://www.sunandblackcat.com/tipFullView.php?topicid=28 This lesson shows how to implement differ ...
- UML类图几种关系的总结 【转】
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...
- Android跟踪NDK崩溃信息
1.NDK编译jni时增加调试信息: $NDK_ROOT/ndk-build -B NDK_DEBUG=1 2.发生崩溃时,logcat中收集日志: - ::): Added shared lib / ...
- i3wm配置记录
因为工作用的笔记本配置比较差,一直用的是xfce4的桌面环境,最近发现其实基本就在浏览器.终端以及编辑器几个界面切换,所以何不直接用平铺窗口管理器,进一步节约资源. 选了一圈,似乎i3wm比较简单,主 ...
- Browsers 之 弹出窗口阻止问题
主要关注两个地方: 1.Microsoft Edge 浏览器: 浏览器 “ 设置 → 查看高级设置 ”,找到 “ 阻止弹出窗口 ”,关闭. 2.IE浏览器 [1] “ 工具 → 弹出窗口阻止程序 ”, ...
- visio 画图工具
1.线条 [设计] --- [页面设置]----打开 对话框 [布局与排列]-----[排列] ---- [样式] --- [直 2.word中插入viso 插入→对象→visio
- ICP备案的一些tips~
1)一个单位是一个备案主体,只能有一个主体备案号: 2)一个企业下面可以有多个网站,依次在备案号后加-1 -2,以此类推,也叫网站备案号,每个网站只能有一个网站备案号.(所谓网站,不是指域名,也不是i ...
- php抽象类和接口的异同【转】
1. 相同点: (1) 两者都是抽象类,都不能实例化. (2) interface 实现类及 abstract class 的子类都必须要实现已经声明的抽象方法. 2. 不同点: ...