javascript中有关作用域的一个小案例

  有关于一个作用域的小案例:

    

var scope = 'global';
function t(){
   console.log(scope);
   var scope = "local";
   console.log(scope);
};
t();

  你猜可能会得到的结果是什么呢?会是:global,local.

  是的和我想的一样,我一开始也是这个想的,后来看了答案之后才知道错了,没错还是一个没有工作过的小菜鸟。

  揭开它的迷底:undefined,local;

  为什么会有这样的结果呢?

  第一个值:

    对于这个函数来说:它的局部变量是有scope的,所以当这个函数在执行的时候,首先会将变量与函数年前,当然这个时候局部变量中,有scope这个变量那么函数体中会优先使用这个局部变量,而不是全局变量。那么问题来了,它只是将这个变量的申明提前了,而这个时候并没有给它赋值,所以就造成了第一个值为undefined.

  第二个值,大家都是能理解的,所以不在这里多说了。当然你觉得你也可以这个尝试一下:

var scope = 'global';
function t(){
   console.log(scope);
   console.log(scope);
};
t();

  这样就没有任何问题了,它确实是可以访问到外部的变量的。

 

 

 

    在函数体内改变外部对象的属性:

function name(obj){
obj.name = 'mack';
obj = new Object();
obj.name = 'jone';
}
var person = new Object();
name(person);
console.log(person.name);

  同样对于这样一个函数又会是怎样的结果呢?

  当然结果是mack而不是jone,为什么是这样的一个结果呢?

  首先来说,对于这个函数来说,传参的时候,传的是一个对象,所以这个进行传参的时候,是传入一个引用的地址。在这个函数中只能对person的属性进行改变,而不能对它的本身进行修改。当然有不对的地方希望大家多指教。

 

转载于:https://www.cnblogs.com/reverse-2016-12-27/p/6238205.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值