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的属性进行改变,而不能对它的本身进行修改。当然有不对的地方希望大家多指教。

 

posted @ 2016-12-30 20:26  迷人的小妖精  阅读(205)  评论(0编辑  收藏  举报