最近回顾了一下javascript的相关知识,借鉴很多资料,加上自己的理解。把学习心得整理下:
一、javascript函数的声明大概有三种方法:
1、最常规的写法:我这里给个例子
//1、最常见函数写法
function general(){
alert('hello javascript!');
}
2、匿名函数的写法:
//2、匿名函数的写法
var anonymity = function(){
alert('hello javascript!');
}
3、构造函数的写法:
//声明一个构造函数
function cf(name,value)
{
this.name = name;
this.value = value;
}
var msg = new cf("zyujie","java");
alert(msg.name);
4、关于第2种写法,匿名函数的写法,我们又有三种写法:这里同样以举例说明
//立即执行的匿名函数,三种写法
(function(){alert(1);})();
void function(){alert(2)}();
!function(){return true;}();
//首先说说第一种:(function(){alert(1);})();
var anonymity = function(){
alert('hello javascript!');
}
anonymity(); //这样就调用了
//演变调用方法==(anonymity)();==把anonymity替换成函数==(function(){alert('hello javascript!');});==就类似于第一种的写法了!
//第二种:void function(){alert(2)}();
//这种就是无返回值的调用。
//第三种:!function(){return true;}();
//这种前面加了一个运算符“!”,就是这个返回值会取非,我们这样写:
var flag = !function(){return true;}();
alert(flag); //结果是false
二、下面回顾一下闭包
javascript的变量有两种作用域:全局和局部。所有函数的内部都能读取到全局变量,而局部变量则只供函数内部使用。
怎么样从外部读取函数内部声明的变量,我们就通过了闭包去解决了这个问题:
一个简单的闭包例子:
//闭包的小例子,b嵌套在a,a则返回b,这样就我们就可以在外面得到函数内部的变量值了
function a() {
var i = 0;
function b() { alert(++i); }
return b;
}
//调用方法,把声明一个变量c,去作为a()函数的引用,c引用了函数a()后,再调返回方法c()
var c = a();
c();
//我们也可以这样写
a()(); //调用函数a(),和返回方法a()();
alert(c.i); //这样得到的结果是undefined,因为我们只能通过返回的方法去得到函数的内部变量,这样是不行的。
下面有一个经常都会用到的闭包的写法:
function personG(){
var name = "default";//变量作用域为函数内部,外部无法访问
return {
getName : function(){
return name;
},
setName : function(newName){
name = newName;
}
}
}
alert(personG().getName()); //返回default
//但是我个人觉得,我们用匿名函数的写法去写最好:
var personA = function(){
var name = "default";//变量作用域为函数内部,外部无法访问
return {
getName : function(){
return name;
},
setName : function(newName){
name = newName;
}
}
}();
alert(personA.getName());
personG和personA的区别:因为匿名函数是先定义后调用,而常规函数是可以先调用的。
personG().setName("zyujie");
alert(personG().getName()); //返回default
personA.setName("zyujie");
alert(personA.getName()); //返回zyujie
//下面写一个时间暂停10秒钟,调用getName的方法,
setTimeout(function(){alert(personA.getName());},10000); //结果还是zyujie,
闭包的一个是前面提到的实例读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
所以在使用过程中,要注意不要乱用闭包,否则会导致内存消耗太大。
就写到这里吧,自己的理解有错误的地方,欢迎大家指正哈。希望和大家共同进步!!
分享到:
相关推荐
匿名函数,也称为拉姆达函数,是一种使用JavaScript函数的强大方式。以下总结了匿名函数的特点: 任何函数表达式从技术上说都是匿名函数,因为没有引用它们的确定的方式; 在无法确定如何引用函数的情况下,递归...
javascript笔记之匿名函数和闭包.docx
(转载)JavaScript中匿名函数,函数直接量和闭包.docx
本文介绍了js匿名函数和闭包的相关内容,供大家参考,具体内容如下 匿名函数 [removed] //function(){}//会报错 var fun = function(){};//将匿名函数赋值给变量 (function(){})();//匿名函数自执行 function...
本文主要通过一些简单的小例子,简述匿名函数和闭包的常见用法,仅供学习分享使用,如有不足之处,还请指正。 普通函数 普通函数由fucntion关键字,函数名,() 和一对{} 组成,如下所示: function box(){ return...
主要介绍了JavaScript 匿名函数和闭包介绍,需要的朋友可以参考下
(转载)JavaScript中匿名函数,函数直接量和闭包
函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途。匿名函数:就是没有函数名的函数。 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这也是最常规的一种 代码如下: ...
函数表达式 1、JavaScript中定义函数有2钟方法: 1-1.函数声明: 代码如下:function funcName(arg1,arg2,arg3){ //函数体} ①name属性:可读取... ①匿名函数(anonymous function,或拉姆达函数):function关键字
闭包是用匿名函数来实现。闭包就是一个受到保护的变量空间,由内嵌函数生成。“保护变量”的思想在几乎所有的编程语言中都能看到。 先看下 JavaScript 作用域: JavaScript 具有函数级的作用域。这意味着,不能在...
NULL 博文链接:https://xieyaxiong.iteye.com/blog/1558277
主要介绍了JavaScript闭包函数访问外部变量的方法,本文使用匿名函数来实现在闭包中访问外部变量,需要的朋友可以参考下
本篇主要介绍普通函数、匿名函数、闭包函数 目录 普通函数:介绍普通函数的特性:同名覆盖、arguments对象、默认返回值等。 匿名函数:介绍匿名函数的特性:变量匿名函数、无名称匿名函数。 闭包函数:介绍闭包...
在JavaScript中,闭包恐怕是很多人不能理解的一个概念了,甚至很多人也会把闭包和匿名函数混淆。 闭包是有权访问另一个函数作用域中的变量的函数。首先要明白的就是,闭包是函数。由于要求它可以访问另一个函数的...
本文通过示例给大家介绍javascript的闭包,原型,和匿名函数,具体详情请看下文。 一 .>关于闭包 理解闭包 需要的知识 1.变量的作用域 例1: var n =99; //建立函数外的全局变量 function readA(){ alert(n)...