JavaScript Closure(闭包) 那些事
1 一起困惑始于变量的作用域
请先看下面的代码:
示例1:
var message = " this is a very simple function ";
function simpleFunc(){
alert(message);
}
背后的道理大家都懂(如果不懂的可以先别往下看了):一个function能够访问其自身及其更外层的作用域内的变量。
请再继续看下面这段代码:
示例2:
var message = " this is a very simple function ";
function simpleFunc(){
var name = "robin";
function secretFunc(){
return "Hi, "+name+ ", "+message;
}
return secretFunc;
}
var magicFunc = simpleFunc();
var result = magicFunc(); // result的值是: Hi, robin, this is a very simple function
好了,困惑的地方来了,magicFunc是一个global的变量,居然访问到了simpleFunc内部的变量'name' !!这正是Javascript之神奇的闭包在起作用,simpleFunc返回的secretFunc对象就是一个闭包,那么到底什么是闭包?
2 拨开云雾见青天
简言之,闭包就是function中的function。
简言之,闭包的作用:1)保证function对象在内存中不被回收;2)访问其它函数内部的变量。
对于第1)点的理解可以结合着示例2来看。magicFunc这个global变量保存了对于secretFunc的引用,因此secretFunc会一直在内存中而不会被自动回收;此外,secretFunc作为simpleFunc的属性,simpleFunc也不会被回收。
对于第2)点的理解需要首先看看closure的定义。在Mozilla的Core JavaScript 1.5 Guide中有这么一句话:A closure is a special kind of object that combin
相关文档:
from http://news.csdn.net/a/20100424/218105.html
JavaScript 的成功让人津津乐道,为 Web 网页编写 JavaScript 代码已经是所有 Web 设计师的基本功,这门有趣的语言蕴藏着许多不为人熟知的东西,即使多年的 JavaScript 程序员,也未能完全吃透。本文从7个方面讲述 JavaScript 中那些你不很熟知但非常实用的技巧。
......
在做一个作业时调用外部的javascript文件中的中文信息时显示乱码。
在声明调用js的标签中加入charset="gb2312"。
如:
<script type="text/javascript" src="check.js" charset="gb2312" > </script> ......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id ......
prototype精彩资料:
"javascript之prototype" http://www.cnblogs.com/zouhaijian/archive/2009/03/29/1424592.html(很简约但清晰的讲述了prototype的用途)
"JavaScript对象模型-执行模型" http://w ......
(一)开始
从WIN95起,WIN系统的一些基本功能被封装在符合通用对象模式COM(Common Object Mode)标准的OLE组件中,在网页上可通过JavaScript语言调用shell实现一些系统功能。用JavaScript调用shell是通过ActiveXObject来实现的,见下:
......