JavaScript函数内部修改全局变量的问题【一道面试题】

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

好的,非常感谢!
时间: 2024-10-13 11:51:36

JavaScript函数内部修改全局变量的问题【一道面试题】的相关文章

如何在一个函数内部修改全局变量

#coding=utf-8 a=5 def test(): global a print(a) test() 输出 5 例子 #coding=utf-8 a=5 def test(): global a a=10 test() print(a) 输出 10 原文地址:https://www.cnblogs.com/sea-stream/p/10765853.html

函数内部使用全局变量的问题

函数内部可以使用全局变量但是不能直接修改全局变量.可以通过global后,进行修改. 1 num = 100 2 def add(): 3 s= num+1 4 print(s) 5 6 add() 7 输出: 8 101 9 10 进程完成,退出码 0 原文地址:https://www.cnblogs.com/ch2020/p/12688596.html

javascript——函数内部属性

1 <script type="text/javascript"> 2 //在函数内部有两个特殊的属性:arguments 和 this.arguments是一个类数组对象,包含传入的所有参数, 3 //但是这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数. 4 //请看经典的阶乘函数例子: 5 function Factorial(num) { 6 if (num <= 1) { 7 return 1; 8 } el

JavaScript函数内部属性和函数方法

函数是对象,有自己的属性和方法 .首先通过console下输出的函数属性方法来直观的看一下: 函数内部属性只要包括两个特殊的对象:arguments和this. 函数属性包括:length和prototype 函数方法(非继承)包括:apply()和call() 继承而来的函数方法:bind().toString().toLocaleString().valueOf() 其他的目前不熟,后面再补充 1. 函数内部属性 在函数内部,有两个特殊的对象,arguments和this. argument

关于函数内部调用全局变量的问题

这个问题遇到了两次,两次都在这里跌倒,还好浩哥及时提醒主要原因如下: $db和$dbsel都是由外部引入的sql类的所以在函数内部使用时必须要用global声明,因为函数内部使用的变量都是通过函数的参数进行传递的,在这里没有穿$db和$dbsel. 还有一个问题:就是关于生成二维码的问题: 以前一直用qrcode 类进行自己生成,不知道还可以直接调用网上的免费接口 打开百度->搜索二维码API->点击进去就能看到她的参数个数以及传递格式  这里要注意一下的是 携带的链接地址如果太长的话,要进行

改变javascript函数内部this指针指向的三种方法

在查了大量的资料后,我总结了下面的三条规则,这三条规则,已经可以解决目前我所遇到的所有问题.规则0:函数本身是一个特殊类型,大多数时候,可以认为是一个变量. function a() { alert(this); } 或者 var a = function() { alert(this); } 都可以认为是创建了一个变量,这个变量的值就是一个函数. 规则1:如果一个函数,是某个对象的key 值,那么,this就指向这个对象. 这个规则很好理解: var a = function(obj) { a

global关键字修改全局变量

#我们知道全局变量在函数外部,强烈建议不要在函数内部修改全局变量,正常情况下,在函数内部改变全局变量并不影响全局变量的值,举例如下 count = 5 >>> def myfun(): count = 10 #在函数内部修改了count print(count) >>> myfun() #调用myfun函数并执行,输出count值为1010>>> count #可见在外面的count值仍然不变.5>>> print (count)5

PYTHON学习0024:函数---局部变量和全局变量----2019-6-19

1.在函数里面(函数的作用域)定义的变量就叫局部变量.在函数外面的变量就叫全局变量,全局能用. 2.函数里面可以调用全局变量,但函数外面不可调用局部变量.也就是说局部变量的作用域只限于函数内部. 3.如果全局和局部都有一个相同名字的变量,函数查找变量的顺序是由内而外的. 4.如果一个程序里有多个函数内部定义了相同的变量名,则变量名之间互不影响的,因为是同级别的. 5.在函数内部修改全局变量:先声明为全局变量:global后加上变量名 然后给全局变量重新赋值.(注意:必须先用global声明,而后

JavaScript 函数参数

函数显式参数(Parameters)与隐式参数(Arguments) 函数显式参数在函数定义时列出. 函数隐式参数在函数调用时传递给函数真正的值. 参数规则 JavaScript 函数定义时显示参数没有指定数据类型. JavaScript 函数对隐式参数没有进行类型检测. JavaScript 函数对隐式参数的个数没有进行检测. 默认参数 如果函数在调用时未提供隐式参数,参数会默认设置为: undefined 有时这是可以接受的,但是建议最好为参数设置一个默认值: function myFunc