问答

js中关于局部变量与函数的两点疑问

作者:admin 2021-06-07 我要评论

请教各位大佬,这个change函数不是返回num了吗,就算function里面的num是局部变量,跟上面的num没任何关系,但是return了啊....为什么输出的还是1 var num = 1; ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

请教各位大佬,这个change函数不是返回num了吗,就算function里面的num是局部变量,跟上面的num没任何关系,但是return了啊....为什么输出的还是1

    var num = 1;
    function change (number) {
        var num = number;
        return num;
    };
    change (2);
    console.log(num)//事实输出1,期望是2

当然上面的代码改一下就能输出2,这是变量提升了

    var num = 1;
    function change (number) {
        num = number;
        return num;
    };
    change (2);
    console.log(num)//事实输出2,期望是2

去掉return num也行

    var num = 1;
    function change (number) {
        num = number;
    };
    change (2);
    console.log(num)//事实输出2,期望是2

那么问题就是
1.为什么第一个代码块期望输出是2,事实输出是1?
2.第二个代码块和第三个代码块function里面的num实际上是全局变量,那么加return num意义何在呢?

###

这三段代码都是完全不同的

问题都过于基础, 你需要去补充基础知识, 最好成体系的阅读一下相关书籍.

问题1:
你的例子1这里的期望输出就是1, 期望输出2是错误的, 原因就是作用域的问题.
change声明的那个 num 只拥有局部作用域, 在函数运行结束时即销毁, 并且对它的赋值或其它任何操作都不会影响到全局变量, 所以你的实际上例子1中的全局的 num 变量从未被修改.
例子2中, 你的 change并没有新声明变量, 所以访问的是全局的 num 变量, 它被修改为2了, 自然你在后面访问全局变量 num 的时候是2了
(所以这两个程序看起来只差了个 var, 实际上是完全不同的)

问题2:
函数是否有返回值完全取决于你的需求, 你的第三个例子就是为了改 num 这个全局变量而没有实质意义上的功能才冒出来的一个莫名其妙的问题...

PS: 全局变量因为各个函数都可以访问所以对它的管理可能会失控, 因此在程序中使用全局变量都需要极其谨慎, 并且尽量避免. 虽然现在来说这句话对你来说可能还只会产生困惑, 就当打个预防针吧.

###

第一段里面虽然有两个num,但是这两个num都是使用var申明的,所以他们是两个完全不一样的东西了。第一个是全局变量的num,第二个是局部变量的num,造成这种误解就是因为你给了他们一个一样的名字。如果你要在函数里面使用局部变量,不要用同名变量!!在实际项目中这种情况是不允许的,一些list工具还会报错,所谓很多难以理解的东西,都是人为制造的误解。你如果把函数里面的var num改为var num2,瞬间就清晰了。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • js中关于局部变量与函数的两点疑问

    js中关于局部变量与函数的两点疑问

  • nodejs作为前端和后端的中间层的存在,

    nodejs作为前端和后端的中间层的存在,

  • Vue 使用jsx 渲染elementui的 el-switc

    Vue 使用jsx 渲染elementui的 el-switc

  • npm 包的demo是怎么实现的

    npm 包的demo是怎么实现的

腾讯云代理商
海外云服务器