函数要访问一个变量的时候,就会先从自己的作用域开始,逐步向外层函数的作用域寻找那个变量的值。简而言之就是外层函数不能访问内层,内层能访问外层。没什么大不了的,平时都在用,没想过里面的机制罢了。 像这样直接在script标签里定义函数大家都写过。name是公有变量。公有域是sayName函数的外层,所以能够访问,这个就是闭包。var name = 'name'; function sayName () { alert(name); }换个复杂点的例子: var person = (function() { var name = 'name'; var person = {}; function sayName() { alert(name); } person.sayName = sayName; return person; })(); 这个例子定义了一个person对象,这个对象有个sayName方法。调用person.sayName()会显示'name'。看上去person是在函数的外层,不应该能访问到函数里的name。但其实调用person.sayName()的时候,调用的是那个内部函数sayName,而内部函数能访问外部函数的变量。这个就是闭包的用处。
像这样直接在script标签里定义函数大家都写过。name是公有变量。公有域是sayName函数的外层,所以能够访问,这个就是闭包。var name = 'name';
function sayName () {
alert(name);
}换个复杂点的例子:
var person = (function() {
var name = 'name';
var person = {};
function sayName() {
alert(name);
}
person.sayName = sayName;
return person;
})();
这个例子定义了一个person对象,这个对象有个sayName方法。调用person.sayName()会显示'name'。看上去person是在函数的外层,不应该能访问到函数里的name。但其实调用person.sayName()的时候,调用的是那个内部函数sayName,而内部函数能访问外部函数的变量。这个就是闭包的用处。
是不是这个意思?#include <stdio.h>
int main()
{
int a,b,t;
printf("intput a,b:\n");
scanf("%d,%d",&a,&b);
goto f_start;
here:printf("a:%d,b:%d\n",a,b);
return 0;
f_start:
{
t=a;
a=b;
b=t;
}
goto here;
}
但是子用父这么说是没错的