变量的作用域

1

var a=10;
function aaa(){
  alert(a);
  var a=20;
}
aaa(); //结果为:undefined

 var a=10;
    function aaa(a){ 
        alert(a);
        var a=20;  
    } 
  aaa(a); // 10

【第一种】
函数内部可以解析为

function aaa(){
  var a; 
  alert(a);
  a=20;  
}

【第二种】
函数传入的 a 是形参,优先级高于 var a; 所以 局部变量a的声明其实被忽略了。

2

        var a = {
            x: 1,
            y: 2
        }
        function foo(obj) {
            obj = {
                x: 2,
                y: 2
            }
        }
        foo(a) 
        console.log(a) 

  // 输出: var a = {
            x: 1,
            y: 2
        }
        var a = {
            x: 1,
            y: 2
        }
        function foo(obj) {
            obj.x = 3;
            obj.y = 4;
        }
        foo(a)
        console.log(a)
      // 输出: var a = {
            x: 3,
            y: 4
        }   

【第一种】
该形参是按值传递的,修改形参本身不会造成实参的修改

【第二种】
该形参是按引用传递的,形参属性所指向的地址与实参所指向的地址一样,修改形参属性就同时修改了实参的属性。

五种基本类型按值传递,对于对象而言,直接修改形参对实参没有效果,而修改形参的属性却可以同时修改实参的属性。

实参 与 形参

【形参】:是在定义函数时使用的参数,目的是用来接收调用该函数时传进来的实际参数。
【实参】:是在调用时传递给函数的参数

函数参数传递包含两种方式:值传递和引用传递。

【值传递】:形参是实参值的一个副本,对形参的改变不会影响实参

【引用传递】:形参实际上是对实参引用变量的复制,导致这实参、形参都指向同一个对象实体。形参改变会同时改变实参的值。

3

        var bb1 = 1;
        function aa(bb1) {
            bb1 = 2;
            console.log(bb1);
        };
        aa(bb1);  //2
        console.log(bb1); // 1  
        var bb = 1;
        function aa() {
            bb = 2;
            console.log(bb); 
        };
        aa(); // 2
        console.log(bb); // 2

【第一种】 函数内部对 bb1 进行赋值,改变的是函数内部的 bb1 变量,不影响全局变量 bb1 ,因为在参数声明的时候,传入了bb1 这个参数,函数内默认的声明了一个 bb1 的局部变量,与函数外的 全局变量 bb1区分开来。

【第二种】 函数内部对 bb1 进行赋值,改变的是全局变量 bb1 的值。

4


        var a = 10;
       function aaa() {
            alert(a);
        };
        function bbb() {
            var a = 20;
            aaa();  
        }
        bbb(); // 10 

        var a = 10;
       function aaa() {
            alert(a);
        };
        function bbb() {
            a = 20;
            aaa();
        }
        bbb(); // 20 
        console.log(a); // 20 

【第一种】
aaa 函数不能访问到 bbb() 里的局部变量,所以访问到的是 a=10,

【第二种】
同样,bbb 函数内部对 a 这个全局变量进行修改,因此 aaa 访问到的 全局变量就改变了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值