有关于一个作用域的小案例:
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的属性进行改变,而不能对它的本身进行修改。当然有不对的地方希望大家多指教。
原文:http://www.cnblogs.com/reverse-2016-12-27/p/6238205.html