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函数参数与闭包(一)
		在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ... 
随机推荐
- c++类模板template中的typename使用方法-超级棒
			转载:https://blog.csdn.net/vanturman/article/details/80269081 如有问题请联系我删除: 目录 起因 typename的常见用法 typename ... 
- mac设置多个屏幕显示的问题
			点击 设置 -> 显示器 -> 排列,然后拉着菜单在两个显示器之间切换. 
- pthread_getspecific和pthread_setspecific使用
			pthread_getpecific和pthread_setspecific实现同一个线程中不同函数间共享数据的一种很好的方式. #more test.c /* * ================= ... 
- Python函数:使用谷歌翻译翻译英语字符串
			代码是同事写的,我把它单独抠出来,可以作为工具函数使用.当然,性能还是个问题,有待解决. import random import cookielib import urllib import url ... 
- Python工作日类库Busines Holiday介绍
			引言: 在日常工作中.常常会碰到相似的场景.须要计算在某个时间段内的工作日以及确定某天是否为工作日,这里的介绍的工具包将很好的解决问题. 1. 工具包Business Holiday介绍 其提供了很e ... 
- vue - helloWorld
			1.cdn概念:cdn全称内容分发网络,也是加速服务之一. 2.数据绑定:{{data}} 3.el属性(挂载对象):el:标签任意(例如:#app,.app,app) 4.data:{} => ... 
- 关于iOS上使用WWW引起的内存泄漏的临时解决方案
			原地址:http://www.unity蛮牛.com/thread-16493-1-1.html 目前,在的4.3.3.和4.3.4版本中存在一个iOS平台上的内存泄漏问题,即当使用WWW来下载和加载 ... 
- taro 创建 Tabbar
			1.代码 src/app.js import '@tarojs/async-await' import Taro, { Component } from '@tarojs/taro' import H ... 
- Visual studio之C# 利用Settings保存COM口配置信息
			背景 利用C#做一个串口通信项目,客户需求保存串口COM口的配置信息,在此利用Settings来进行保存. 正文 ".Settings"的创建 点击项目 --> 添加新项 - ... 
- 【小程序】微信小程序开发—弹出框
			1. <span style="font-family:Comic Sans MS;font-size:18px;color:#333333;"><view cl ... 
