zoukankan      html  css  js  c++  java
  • 局部变量和参数传递的问题

    <SCRIPT LANGUAGE="JavaScript">
    var bb = 1;
    function aa(bb) { //这里传递参数相当于 var bb = bb ;给形参bb赋值为1。(又参数传递,相当于就是在函数中定义了一个局部变量并且给这个变量赋了初值1)此bb非彼bb,是分别在两个不同的内存区间的变量,全局变量bb在堆中,局部形参bb在栈中。
        bb = 2;  
        alert(bb);
    };
    aa(bb);//2
    alert(bb);//1
    </SCRIPT>

     

    函数体内,bb并没有使用var来定义,按理说这个bb在预处理的时候应该是window的属性。但在这里,函数声明的时候,带了一个参数bb,也就是相当于在函数体内声明了var bb。所以,函数里的bb就是函数活动对象的属性。所以函数执行时会输出2。函数执行完后,函数的活动对象被销毁,也就是局部的这个bb被删除了,执行流进入到window,再输出bb,值就是1了。

    如果声明函数时,把参数那里的bb去掉,这段代码执行起来,结果就是弹出 2 2

    记住一句话就好了:“ECMA中所有函数的参数都是按值传递的”
    值传递:把把一个值类型(也叫基本类型)传递给另一个变量时,其实是分配了一块新的存储空间,因此就本题来说,在内部改变这个值时,其实在函数外部对这个值没有影响。
  • 相关阅读:
    怎么导出SQL所有用户表的字段信息
    全面掌握C#中的拖放操作
    C#中使用Hook(钩子)
    如何在winform程序中显示网页
    设置socket.Receive()的等待时延
    局域网QQ(C#版)
    C#实现系统热键的功能
    使用C#在应用程序间发送消息
    某某人整理的c#.net函数列表
    C#串口通信编程类(修改版)
  • 原文地址:https://www.cnblogs.com/aixiuxiu/p/6516961.html
Copyright © 2011-2022 走看看