zoukankan      html  css  js  c++  java
  • JavaScript函数内部修改全局变量的问题【一道面试题】

    JavaScript函数内部修改全局变量的问题

    今天 10:44梵天莲华 | 浏览 23 次
    代码如下,为什么加了 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
    好的,非常感谢!
  • 相关阅读:
    UVa 10474
    UVa 1339
    UVa 1368
    UVa 1585
    UVa 1586
    ACM中Java高效输入输出封装
    Ajax中Get请求与Post请求的区别
    AJAX——核心XMLHttpRequest对象
    PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
    PHP类方法重写原则
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/6158539.html
Copyright © 2011-2022 走看看