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
    好的,非常感谢!
  • 相关阅读:
    day 80 视图家族
    day 79 drf 多表关联操作
    day 78 drf 序列化
    day 77 drf中请求、渲染、解析、异常、响应模块的二次封装
    day 76 drf
    python小知识
    请求 渲染 解析 异常 响应模块
    子组件
    vue基础(2)
    vue基础
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/6158539.html
Copyright © 2011-2022 走看看