首页 > 编程语言 > 详细

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

时间:2016-12-30 21:56:56      阅读:208      评论:0      收藏:0      [点我收藏+]

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

    

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

 

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

原文:http://www.cnblogs.com/reverse-2016-12-27/p/6238205.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!