匿名函数和字面量——JS学习
来源:互联网 发布:朝鲜 知乎 编辑:程序博客网 时间:2024/05/24 04:22
这两天在学习JS,学习到了匿名函数,和以前见过的函数的定义有很多不同,所以写此文章来探讨一下。
一、匿名函数
说道匿名函数,其实就是没有函数名的函数,通常只需要带一个()就可以被调用,实例如下:
function(){ alert("123"); //弹出警告“123”} //匿名函数定义
(function(){ alert("123"); }()) //匿名函数使用
var box=new function(){ alert('123');} //匿名函数给一个对象box(); //执行匿名函数
以上三个代码框就是匿名函数的声明以及使用方法,具体来讲,和一般的函数也没有什么区别,加了括号就是可以执行的,他们还可以带参数:
var double = function(x) { return 2* x; }但是他们和闭包,构造函数一起用起来就很是有用了。
二、字面量
什么是字面量呢,在js的代码中,他就是一个匿名函数的函数代表字符,作用是让一个对象很快的理清楚他的输出方法和功能结构。
定义对象的属性和方法:
A、传统方法
function objrun(){ return ‘123’;}var box = new Object();box.name=’abc’;box.age = 28;box.run = objrun;alert(box.run()); //结果为123alert(box.run); //结果为<span style="font-family: Arial, Helvetica, sans-serif;">function objrun(){</span><span style="font-family: Arial, Helvetica, sans-serif;">return ‘123’;</span><span style="font-family: Arial, Helvetica, sans-serif;">}</span>
B、用字面量的方法
var box = { name:’abc’, age:28, run:function(){ return ‘123’;}}alert(box.run());
可见run这个属性就是调用的一个匿名函数来实现的输出,其实还可以在匿名函数里协商其他属性的内容方便调用和输出。
对象字面量的定义方式,可以轻松搞定函数大量参数需要一一对应输出的情况。他的对策就是给函数传入一个对象,而这个对象是用字面量的方式定义的,属性和值对应的方式可以一目了然他们的关系,因为函数只是一段代码,必须调用才能执行。
三、闭包
闭包的英文单词是closure,这是JavaScript中非常重要的一部分知识,因为使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。
闭包的含义:闭包说白了就是函数的嵌套,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕(这点涉及JavaScript作用域链)。
例子:
function(){ var a=0; for(var i=0;i<100;i++){ function(){ a=a+1; }; };alert(a);} //执行结果就是输出a的值为99
由于内层的匿名函数在for循环中一直执行,导致外层函数没有结束,所以a一直没有被释放,导致了a一直在加一,内层的这个函数就是一个闭包的存在。
匿名函数最大的用途是创建闭包(这是JavaScript语言的特性之一),并且还可以构建命名空间,以减少全局变量的使用。这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!
四、总结
看似一个小小的匿名变量,竟然有了这么多有趣,有用的用处,让我们的程序更加的优化,实在是不能够小瞧他的作用啊,匿名函数的应用应该不少,原型模式的实现多少也和他有些关系,所以对于以上三个概念的理解很是重要。
- 匿名函数和字面量——JS学习
- Js函数字面量和Function()构造函数的区别||匿名函数
- Javascript函数字面量演绎匿名函数
- js拾遗: 函数字面量
- js迭代器迭代类数组和字面量对象
- JS字面量对象
- js对象字面量
- js对象字面量
- js对象字面量
- Scala函数字面量
- Java温习——字面量和常量
- 轻松拿下JavaScript(四)——对象字面量,this,call()和apply()方法,JS的异常处理
- js中的字面量与构造函数创建对象
- JS语言精粹学习笔记--对象字面量
- 函数之函数字面量
- 学习Scala:函数字面量是如何实现的
- JS干货--对象字面量
- js 匿名函数学习
- 关于编译后文件取回 - Samba服务器
- 关于vector在堆上还是在栈上的思考与vector.push_back()究竟放入的是什么
- Java入门习题(五)——内部类
- 利用bochs将逻辑地址转化为物理地址理解操作系统的分段分页机制
- No2.认识图片---机房收费
- 匿名函数和字面量——JS学习
- 在Maven项目中加载spring中的bean的配置xml文件会提示找不到解决方法
- 二分图总结
- C++ primer plus 第十章课后习题,原创答案。
- cccc结构体
- Swift 学习1
- Android 面试题
- 计算机科学与技术院校排名(2015,2016-2017)
- Host-Base LAN-Base LAN-Free Server-Free备份方式详解