匿名函数和字面量——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命令。如果不用的话,你实际上声明了一个全局变量!


四、总结


     看似一个小小的匿名变量,竟然有了这么多有趣,有用的用处,让我们的程序更加的优化,实在是不能够小瞧他的作用啊,匿名函数的应用应该不少,原型模式的实现多少也和他有些关系,所以对于以上三个概念的理解很是重要。

0 0
原创粉丝点击