美文网首页JS程序员让前端飞
JS—匿名函数与命名函数

JS—匿名函数与命名函数

作者: Miss____Du | 来源:发表于2014-12-10 23:12 被阅读1325次

链接,我之前做的两篇笔记js变量作用域,里面提到定义函数的不同方式,导致的变量声明提升问题。还有这篇js特殊的对象函数


  • 命名函数与匿名函数
  • 以函数声明的方式声明命名函数
    function f1(){
    alert(1)
    }
  • 以函数表达式的方式声明匿名函数
    var f5=function(){
    alert(f5);
    }
  • 判断是否为匿名函数
    FireFox、Safari、Chrome、Opera都给函数定义了一个非标准的name属性。
    alert(f1.name);//f1
    alert(f5.name);//""
    但是IE不支持这个属性。
  • 函数声明提升
    之前写变量声明提升时,写的有有关函数部分的声明提升,有问题,不过已经更正了。
    var met=true;
    if(met){
    function f3(){
    alert(3);
    }
    }
    else{
    function f2(){
    alert(2)
    }
    }
    f2();//2
    f3();//3
    观察上述代码,初衷是希望根据met的值的情况来选择函数定义。
    但是在if语句结束后,发现两个函数均可以被调用。
    var met=true;
    var ff;
    if(met){
    ff=function(){
    alert(3);
    }
    }
    else{
    ff=function(){
    alert(2)
    }
    }
    ff();//3
    使用函数表达式的方式,却很好的实现了函数初衷。
    【结论】第一段代码函数声明提升后的效果为:
    var met=true;
    function f3(){
    alert(3);};
    function f2(){
    alert(2)
    };
    if(met){}
    else{}
    f2();//2
    f3();//3
    会发现,if语句根本没有起到作用。
  • 函数可以被删除么?
  • 函数的删除
    这篇文章说的很细。
    delete操作符通常用来删除对象的属性,但是却不能删除变量,也不能删除函数。
    function f1(){
    alert(1)
    }
    alert(delete f1);//false
    删除不成功则会返回false。
    var met=true;
    alert(delete met);//false
    同理变量也是这样。
    var obj={
    name:"du",
    age:19
    }
    alert(delete obj.name);//true
    但是对象属性却可以。
  • 指向空指针
    function f1(){
    alert(1)
    }
    var f6=f1;
    f1=null;
    f6();//1
    f1();//error
    将函数f1复制给f6,这时f6与f1都指向这个函数,此时让f1指向null,那么此时引用这个函数的引用类型变量只有f6。
    问题】函数不能被删除,那么如果这个函数不用了,他占得内存怎么释放?
    js有一种内存清理机制,是可以根据函数在一段时间内被引用的次数来决定是否清理该函数对象所占的内存。
    也就是说如果此时已经没有一个引用类型变量引用此函数,那么这个函数也就不可能再被引用,也就可能会被js释放这个函数对象所占内存。

相关文章

  • JS—匿名函数与命名函数

    链接,我之前做的两篇笔记js变量作用域,里面提到定义函数的不同方式,导致的变量声明提升问题。还有这篇js特殊的对象...

  • javascript 函数的几种写法

    在JS中函数可以分为两种,具名函数(命名函数)和匿名函数。 1.函数声明 function aa() 最普通最标...

  • js 深入

    * js语法* js的动态函数和匿名函数* js动态函数Functionnew Function();* 匿名函数...

  • 函数

    函数的分类: 命名函数:函数如果有名字,就是命名函数 匿名函数:函数如果没有名字,就是匿名函数 函数的另一种定义方...

  • 匿名函数

    自己自我调用的函数就是匿名函数,函数没有命名也是匿名函数 举例: ()() var a=function(){} ...

  • EcmaScript: Arrow function

    es6新增函数写法,类似匿名函数的简洁写法,又和匿名函数有些重要区别 原来的函数写法: 命名函数、匿名函数、封闭函...

  • Elixir-函数

    目录 匿名函数& 操作符 模式匹配 命名函数函数名字和元数私有函数卫兵参数默认值 匿名函数 匿名函数就是没有名字,...

  • PHP闭包

    一. 闭包函数又叫做匿名函数(没有函数名称的函数). 英文closure 匿名函数常在js函数中出现,比如ajax...

  • JS操作属性、函数

    JS操作style属性 JS操作class属性 函数 匿名函数 函数传参 作业 if练习 switch练习

  • JavaScript-函数进阶

    1 - 函数的定义和调用 1.1 函数的定义方式 命名函数function fn(){} 匿名函数var fn =...

网友评论

  • 棒小伙儿:if内声明函数 外面是无法运行的 用Chrome测试 f2报错
  • mary_s:等号两边没空格 function的括号和大括号之间没空格 看的我强迫症要犯了 :joy:
    Miss____Du:@mary_s 这个是工作之前的文章,看上去多原始 :joy:
  • Miss____Du:@林宝灵sherry 如果你没看过计算机语言类的书,理解但这样已经很不错啦,
  • Miss____Du:@林宝灵sherry @桃白白 @LostAbaddon 这两位比我接触代码的时间长,说的都比较专业,都是一个理,
  • LostAbaddon:@桃白白 @林宝灵sherry 其实,从数学上来说,所谓函数就是在两个集合之间建立的一种映射,这也是符合程序上所说的“函数”的——
    一个(程序)函数可接受的所有可能的参数构成一个集合(输入集合),其所产生的所有可能的结果作为一个集合(输出集合),那么这个函数就是从输入集合到输出集合的映射,符合数学函数的定义。
  • Miss____Du:@林宝灵sherry 为什么叫函数呢?首先,函数都是来解决问题的。面向对象语言中,利用函数封装一定的操作与变量来实现一定的效果。数学中,联立方程式来解决问题。其次呢,函数都有自己的变量。面向对象语言中,将要用到的某些值,以变量的形式传入函数。数学中,让变量陷入一定的逻辑关系,进而求得变量值。
    总之呢,如果你数学学得挺好,有一定的逻辑性,在编写计算机语言的函数时,也会得心应手。
    我怎么觉得我没说明白? :joy:
  • Miss____Du:@林宝灵sherry 嗯~不是浏览器与数学函数的关系,是js这门脚本语言涉及的函数概念与数学函数的关系。我们熟悉的在浏览器上运行为文件像以.html为后缀名的文件,他本是静态网页,为了让网页内容动起来,让网页内容与后台交互更方便,引入了这样一门脚本语言:javascript(JS)这门语言可以直接在浏览器上执行。我这个专题下的笔记都是讲解的js语法,所以此函数非彼函数哦, :blush:

本文标题:JS—匿名函数与命名函数

本文链接:https://www.haomeiwen.com/subject/xadntttx.html