//普通函数
function box() {
return 'Lee';
}
alert(box());
//匿名函数
function () { //单独的匿名函数,是无法运行的
return 'Lee'; //就算能运行,也无法调用,因为没有名称
}
//把匿名函数赋值给变量
var box = function () {
return 'Lee';
};
alert(box());
//通过自我执行来执行匿名函数
(function () { //(匿名函数)(); 第一圆括号放匿名函数,第二个圆括号执行
alert('Lee');
})();
(function () {
alert('Lee');
})();
//把匿名函数自我执行的返回值赋给变量
var box = (function () {
return 'Lee';
})();
alert(box);
//自我执行后用alert()打印
alert((function () {
return 'Lee';
})());
//自我执行匿名函数的传参
(function (age) {
alert(age);
})(100);
//函数里放一个匿名函数
function box() {
return function () { // 闭包
return 'Lee';
}
}
alert(box()());
function box() {
return function () { // 闭包
return 'Lee';
}
}
var b = box();
alert(b());
//通过闭包返回局部变量
function box() {
var age = 100;
return function () {
return age;
};
}
alert(box()());
//使用全局变量进行累加
var age = 100;
function box() {
age++;
}
alert(age);
box();
alert(age);
box();
alert(age);
//使用局部变量进行累加
function box() {
var age = 100;
age++;
return age;
}
alert(box());
alert(box());
alert(box());
alert(box());alert(box());
//使用匿名函数实现局部变量驻留内存中从而累加
function box() {
var age = 100;
return function () {
age++;
return age;
};
}
var b = box();
alert(b());
alert(b());
alert(b());
alert(b());
//alert(age);
b = null; //解除引用,等待垃圾回收
alert(b());
//循环里的匿名函数的取值问题
function box() {
var arr = [];
for (var i = 0; i < 5; i ++) {
arr[i] = function () { //arr[0] = 0,arr[1] = 1 .... arr[4] = 4
return i;
};
}
//循环已经执行完毕了,i最终是4++ = 5 ,那么最终就是5
return arr;
}
//alert(box()[0]);
var b = box();
//alert(b.length);
for (var i = 0; i < 5; i ++) {
alert(b[i]());
}
//改0
function box() {
var arr = [];
for (var i = 0; i < 5; i ++) {
arr[i] = i;
}
return arr;
}
var b = box();
for (var i = 0; i < 5; i ++) {
alert(b[i]);
}
//改1
function box() {
var arr = [];
for (var i = 0; i < 5; i ++) {
arr[i] = (function (num) { //通过自我及时执行匿名函数
return num;
})(i);
}
return arr;
}
var b = box();
for (var i = 0; i < 5; i ++) {
alert(b[i]);
}
//改2
function box() {
var arr = [];
for (var i = 0; i < 5; i ++) {
arr[i] = (function (num) {
//num其实在这里
return function () { //因为闭包可以将变量驻留在内存中,和上一节课的累加是一个道理
return num;
}
})(i);
}
//已经执行完毕了,num为什么可以0,1,2,3,4
return arr;
}
var b = box();
for (var i = 0; i < 5; i ++) {
alert(b[i]());
}
var b = function () {
alert('Lee');
}();
function box() {
var arr = [];
for (var i = 0; i < 5; i ++) {
arr[i] = function (num) {
return function () { //因为闭包可以将变量驻留在内存中,和上一节课的累加是一个道理
return num;
}
}(i);
}
//已经执行完毕了,num为什么可以0,1,2,3,4
return arr;
}
var b = box();
for (var i = 0; i < 5; i ++) {
alert(b[i]());
}
//关于this对象
var box = {
getThis : function () {
return function () {
return this;
}
}
};
alert(box.getThis()());
var user = 'The Window';
var box = {
user : 'The Box',
getUser : function () {
//这里作用域的this是Box
var that = this;
return function () {
//这里作用域的this是window
return that.user;
}
}
};
//alert(box.getUser()());
//对象冒充
//alert(box.getUser().call(box));
alert(box.getUser()());
function box() {
var oDiv = document.getElementById('oDiv');
var text = oDiv.innerHTML;
oDiv.onclick = function () {
alert(text);
};
oDiv = null; //解除引用,等待垃圾回收
alert(oDiv);
}
box();
//块级作用域(私有作用域)
function box() {
for (var i = 0; i < 5; i ++) { //块级作用域(JS没这个东西)
}
alert(i);
}
box();
function box() {
for (var i = 0; i < 5; i ++) { //块级作用域(JS没这个东西)
}
var i = 111; //就算重新声明,也不会影响之前声明初始化的数据
alert(i);
}
box();
//使用块级作用域(私有作用域)
function box() {
(function () { //包含自我执行的匿名函数,就可以实现私有作用域
for (var i = 0; i < 5; i ++) {
alert(i);
}
// 这里面用了a,b,c等变量
})(); 被销毁了
//这里可以继续似乎用a,b,c等变量,和上面的a,b,c完全没有联系
//出了这个私有作用域,变量立即被销毁
alert(i); //这里就不认识了
}
box();
//全局变量
var age = 100;
alert(age);
age = null;
//私有作用域来表示
(function () {
//这里就是全局的私有作用域
var age = 100;
alert(age);
})();
(function () {
var a;
var b;
})():
//私有变量
function box() {
var age = 100; //私有变量
}
box();
function Box() {
this.age = 100; //属性,公有的
this.run = function () { //方法,公有的
return '运行中...';
};
}
var box = new Box();
alert(box.age);
alert(box.run());
function Box() {
var age = 100; //私有变量
function run() { //私有函数
return '运行中...';
}
this.publicGo = function () { //对外可见的公共接口,特权方法
return age + run();
};
this.getAge = function () {
return age;
}
}
var box = new Box();
alert(box.getAge());
//通过构造函数传参
function Box(value) {
var user = value; //私有变量
this.getUser = function () {
return user;
};
}
var box = new Box('Lee');
alert(box.getUser());
var box2 = new Box('kkk');
alert(box.getUser());
function Box(value) {
var user = value; //私有变量
this.getUser = function () {
return user;
};
this.setUser = function (value) {
user = value;
}
}
var box = new Box('Lee');
alert(box.getUser());
box.setUser('OOO');
alert(box.getUser());
function Box(value) {
var user = value; //私有变量
this.getUser = function () {
return user;
};
this.setUser = function (value) {
user = value;
}
}
var box = new Box('Lee');
alert(box.getUser());
var box2 = new Box('kkk');
alert(box.getUser());
(function () {
var user = '' //私有变量
//function Box() {} //构造函数,但在函数里写构造函数,不支持,因为私有作用域里的函数,外部无法访问
Box = function (value) {//全局,构造函数
user = value;
};
Box.prototype.getUser = function () {
return user;
};
Box.prototype.setUser = function (value) {
user = value;
}
})();
var box = new Box('Lee'); //第一次实例化
alert(box.getUser());
var box2 = new Box('kkk'); //第二次实例化
alert(box.getUser());
box2.setUser('OOO');
alert(box.getUser());
//什么叫单例,就是永远只实例化一次,其实就是字面量对象声明方式
var box = { //第一次实例化,无法第二次实例化,那么就是单例
user : 'Lee',
run : function () {
return '运行中..';
}
};
var box = function () {
var user = 'Lee'; //私有变量
function run() { //私有函数
return '运行中...';
}
return {
publicGo : function () { //对外公共接口的特权方法
return user + run();
}
};
}();
alert(box.publicGo());
var box = function () {
var user = 'Lee'; //私有变量
function run() { //私有函数
return '运行中...';
}
var obj = {
publicGo : function () { //对外公共接口的特权方法
return user + run();
}
};
return obj;
}();
alert(box.publicGo());
//之前两个,都是返回的{} 也就是Object,那么我想返回自定义的呢?Box,Desk
function Desk() {}
var box = function () {
var user = 'Lee'; //私有变量
function run() { //私有函数
return '运行中...';
}
var desk = new Desk();
desk.publicGo = function () {
return user + run();
};
return desk;
}();
alert(box.publicGo());
分享到:
相关推荐
匿名函数,也称为拉姆达函数,是一种使用JavaScript...JavaScript中的匿名函数和闭包都是非常有用的特性,利用它们可以实现很多功能。不过,因为创建闭包必须维护额外的作用域,所以过度使用它们可能会占用大量内存。
JS中的匿名函数和闭包,详细解释了大家的疑惑,提升大家对的JS的进一步的理解!
javascript笔记之匿名函数和闭包.docx
本文介绍了js匿名函数和闭包的相关内容,供大家参考,具体内容如下 匿名函数 [removed] //function(){}//会报错 var fun = function(){};//将匿名函数赋值给变量 (function(){})();//匿名函数自执行 function...
本文主要通过一些简单的小例子,简述匿名函数和闭包的常见用法,仅供学习分享使用,如有不足之处,还请指正。 普通函数 普通函数由fucntion关键字,函数名,() 和一对{} 组成,如下所示: function box(){ return...
主要介绍了JavaScript 匿名函数和闭包介绍,需要的朋友可以参考下
本文详细介绍了匿名函数、闭包、并给出了详细的例子以及详细的注意事项,是篇非常非常不错的文章,推荐给大家。
(转载)JavaScript中匿名函数,函数直接量和闭包.docx
闭包是用匿名函数来实现。闭包就是一个受到保护的变量空间,由内嵌函数生成。“保护变量”的思想在几乎所有的编程语言中都能看到。 先看下 JavaScript 作用域: JavaScript 具有函数级的作用域。这意味着,不能在...
NULL 博文链接:https://xieyaxiong.iteye.com/blog/1558277
本文实例分析了js中匿名函数的创建与调用方法。分享给大家供大家参考。具体实现方法如下: 匿名函数就是没有名字的函数了,也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数...
匿名函数:没有实际名字的函数。 匿名函数的作用: 1、通过匿名函数可以实现闭包,关于闭包在后面的文章...本章节重点给大家介绍JavaScript 中的匿名函数((function() {})();)与变量的作用域,具体内容如下所示: 以前
本篇主要介绍普通函数、匿名函数、闭包函数 目录 普通函数:介绍普通函数的特性:同名覆盖、arguments对象、默认返回值等。 匿名函数:介绍匿名函数的特性:变量匿名函数、无名称匿名函数。 闭包函数:介绍闭包...
(转载)JavaScript中匿名函数,函数直接量和闭包
本文通过示例给大家介绍javascript的闭包,原型,和匿名函数,具体详情请看下文。 一 .>关于闭包 理解闭包 需要的知识 1.变量的作用域 例1: var n =99; //建立函数外的全局变量 function readA(){ alert(n)...
二、封闭函数封闭函数是javascript中匿名函数的另外一种写法,创建一个一开始就执行而不用命名的函数。 1、一般函数的定义和执行函数 2、封闭函数的定义和执行:(function(){…})();还可以在函数定义前加上”~”或者...