学习Javascript的闭包、原型和匿名函数
本文给出了Javascript的闭包、原型和匿名函数的示例,并查看下面的详细信息。闭包之一。
理解闭包所需的知识
1的范围。变量
1例:
var = 99;函数之外的全局变量
读函数(){
警报(n);读取全局变量
}
(一); / /执行此功能
2例:
功能readb(){
var=9;
功能reADC(){
Console.log(C); / /好C可见
}
返回reADC;
}
警报(c);错误C未定义。
当注释:函数声明变量C时,必须添加var,否则C将变成一个全局变量。
因此,全局变量在函数中可见,函数中的局部变量对外部世界是不可见的。
js的范围是一个链,父对象中的变量总是对子对象可见,子对象的对象对父对象不可见。
当我们在函数中获取内部变量时
所以有一个例子3:
功能readb(){
var=9;
功能reADC(){
Console.log(C);
}
reADC()返回;
}
ReadB ();
闭包与基于此的变体非常相似。
功能readb(){
var=9;
功能reADC(){
Console.log(C);
}
返回reADC;
}
VaR既= readb();
(RES);
注:
1。仔细使用闭包,注意内存占用,因为它会保存父函数的状态。
2。不要更改父函数的内部变量的值。
理解闭包
注意:这是指包含它的函数被执行的对象。
1例:
窗口;
var对象{ { {
名称:我的对象
GetNameFunc:(功能)在这个({ / /执行功能)属于对象,是客体对象的属性的值,
此函数的返回(函数)是根对象窗口中的一个匿名函数,属于窗口。
返回this.name;
};
}
};
console.log(object.getnamefunc()()); / /窗口
2例:
窗口;
var对象{ { {
名称:我的对象
GetNameFunc:函数(){
var =;
返回函数(){
返回that.name;
};
}
};
console.log(object.getnamefunc()()); / /我的对象
两个匿名函数。
直接定义匿名函数,然后调用匿名函数,这在定义jQuery插件时是常见的。
1。以字母函数方式。声明一个匿名函数,然后执行它。
(函数(){())
console.log('excute自我);
});
2、通过优先级表达式,因为Javascript的执行表达式是从圆括号到外部的,圆括号可以用来强制声明函数。
(
函数(){
警报(2);
}
()
);
的3.void操作员使用的操作执行一个操作数是没有括号包围
函数(){ console.log('void ')}();
三关于原型。
原型样机
了解protitype JS首先需要了解JS的面向对象设计
函数人(名称){
this.name =名称;
console.log(本); / /窗口或对象名称:'xxx'} {
(this.introduce =功能){ / /对象的方法
console.log(这个名字);
}
}
新的人('leon)介绍();
这是一个非常有趣的现象,与前面的观点相结合,
第一个函数中的默认人/这指向窗口对象
当调用人员();这个窗口对象的输出
/ /但曾称新的人('xx),这个输出是{姓名:'xx}
也是很好的理解,一旦新建,就创建一个新对象
实例对象的方法只能是新的人('leon)。介绍();电话在使用前必须初始化
类对象的静态方法
var是一个对象或函数数组,人们现在需要的是一个引用类型。
people.sayhi =功能(to_who){
console.log(嗨+ to_who);
}
people.sayhi('lee '); / /打这个电话
原型法
var(人=函数){;人必须是函数(){ }是一个不是对象或值类型或引用类型的类。
people.prototype.meet =功能(meet_who){
console.log(我+ this.name +,以满足+ meet_who);
};
新的人('lee)满足('xx);
原型方法只能由这个类的对象调用。
a.prototype =新的B();
原型看起来像继承,但它不是,它更像克隆更准确。
如果父类和子类出现相同的属性,则采用邻近原则,如果找不到要查找的级别,如果指定调用的属性,则使用调用方法。
extendclass.prototype =新的基类();
var实例=新extendclass();
无功baseinstance =新的基类();
baseinstance.showmsg.call(实例);
obj1.func.call(obj);
上面是一个学习Javascript闭包、原型和匿名函数的小程序包,希望对大家有用。