您的位置:首页 > Web前端 > JavaScript

JavaScript中的变量和闭包

2012-05-02 01:40 106 查看
JavaScript基础

1.变量声明
JavaScript可以使用var显式地声明变量:

var iNum;

因为JS是弱类型语言,即使变量的类型在初始化时已经被确定,也仍然可以之后把他设置成其他类型

var sName = "ziqiu";

alert(sName);

sName=55;

alert(sName);

变量除了可以显式声明,也可以隐式声明,就是不使用var关键词声明,而直接为变量赋值

隐式变量的作用域总是被创建为全局变量。即使在一个函数中的变量也仍然是全局的。

function test()

{

sName="ss";

}

test();

alert(sName); //输出ss

虽然sName是在函数中创建的,但是在函数外层仍然能够访问sName,因为sName是全局变量。

2.变量的作用域与闭包

变量的作用域就是变量的作用范围i,只有在变量的作用域内才可以访问该变量,否则是无法访问此变量的。

functio test() {

var sName="ss";

}

alert(sName); //输出sName未定义

全局变量是Window对象的属性。

隐式声明的变量都是全局变量。说是"全局"但实际上还是有作用域的,即当前的Window对象。一个全局变量就是Window对象的一个属性。

function test(){

sName = "ss";

test();

alert(sName);

alert(window.sName);

}

闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常为一个函数),因而这些变量也是该表达式的一部分

简单表述:

闭包就是function实例以及执行function实例时来自环境的变量。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>闭包举例</title>
</head>
<body>
<div id="divResult">
</div>
<script type="text/JavaScript">
function start()
{
var count=10;
//设置定时器,每隔3秒钟执行一次
window.setInterval(function(){
//定时器,每隔3秒钟执行一次
document.getElementById("divResult").innerHTML +=count +"</br>";
count++;
},3000);
};
start();
</script>
</body>
</html>


count是start()函数体内的变量,按照通常的理解为count的作用域是在start()函数内,在调用start()函数结束后应该也会消失。但是此示例的结果是count变来那个会一直存在,并每次被加1

这是因为count变量是setInterval中创建的匿名函数(也就是包含count++的函数)的闭包的一部分!

再通俗地讲,闭包首先就是函数本身,比如上面这个匿名函数本身,同时加上在这个函数运行时需要用到的count变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: