Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
421 views
in Technique[技术] by (71.8m points)

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

请教各位大佬,这个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意义何在呢?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

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

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...