Javascript中局部变量和全局变量还有闭包的概念
Posted igong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript中局部变量和全局变量还有闭包的概念相关的知识,希望对你有一定的参考价值。
1.一段javascript代码中 声明在方法或者对象外部的变量 称为全局变量 可以用var修饰,也可以不用。而声明在方法或者对向内部的变量,有var修饰的 就是局部变量 没有var修饰 依然是全局变量
举例1:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script>
var name = "The Window"; //全局变量 name
var object = { //全局变量 object
name: "My Object",//他的名字是 myobject (局部变量)
getNameFunc: function() { //有一个 名为getnamefunc的方法
return function() { //返回值是 匿名函数 ,其返回值是this.name
return object.name;
};
}
};
alert(object.getNameFunc()()); //局部变量objcet.name 在objcet环境下被弹窗
alert(name); //全局变量 var name 在全局环境下被弹窗
</script>
</body>
</html>
举例2:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script>
var name = "The Window"; //全局变量 name
var object = { //全局变量 object
name: "My Object",//他的名字是 myobject (局部变量)
getNameFunc: function() { //有一个 名为getnamefunc的方法
return function() { //返回值是 匿名函数 ,其返回值是this.name
return this.name;
};
}
};
alert(object.getNameFunc()()); //在function作为方法被调用的时候 ,this指向的就是全局 this.name 指向的就是 “The Window”
alert(object.name); // 指向局部变量object.name "My Object"
</script>
</body>
</html>
这里有个概念 比较绕口 就是函数(method)和方法(function)的区别:
函数(function)是可以执行的javascript代码块,由javascript程序定义或javascript实现预定义。函数可以带有实际参数或者形式参数,用于指定这个函数执行计算要使用的一个或多个值,而且还可以返回值,以表示计算的结果。
方法(method)是通过对象调用的javascript函数。也就是说,方法也是函数,只是比较特殊的函数。假设有一个函数是fn,一个对象是obj,那么就可以定义一个method:
1
2
|
obj.method = fn; obj.method(); //定义之后的调用 |
虽然区别对待函数和方法比较有用,但实际比较起来,它们之间并没有想象中那么大的差别。函数是可以用函数直接定义,也就是函数可以直接储存在变量之中,因为函数和字符串、数值一样也是数据类型。假如储存函数的变量是全局变量,也即是window对象的一个属性。因此,当你调用这个函数时,实际上也是调用window对象的一个方法。所以在函数和方法之间并没有技术上的区别,真正的差别在于设计和目的,方法是用来对this对象进行操作的,this对象是方法的一个重要属性,当this对象出现在方法主体内部,this值就指向调用该方法的对象。而函数通常是独立的,并不需要经常使用this对象。(这段是转载百度知道ZhangXin777999的)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
闭包的概念:
简单来说 就是父函数内的变量对子函数可见且可用。而子函数内的变量对父函数则不可见。
而闭包主要的功能有两个:一个是可以利用返回值让外部调取某个函数内部的变量,还有一个就是 如果一个变量以后也要用到。那么就需要这个变量不能被GC回收
具体请参考阮老师的博客 http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
有很精细的讲解。
以上是关于Javascript中局部变量和全局变量还有闭包的概念的主要内容,如果未能解决你的问题,请参考以下文章