有关于一个作用域的小案例:
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的属性进行改变,而不能对它的本身进行修改。当然有不对的地方希望大家多指教。