zoukankan      html  css  js  c++  java
  • [js]函数声明与调用

    函数普通声明与调用

    function a(){ 
      alert(
    'IIFE'); }
    //下面是一个函数调用 a();

    理解一下就是在一个声明了的函数后面加上一个()就可以调用函数了

    所以下面这样写同理(有一点小错误,会报错)

    function a(){ 
        alert('IIFE'); }()

    但是我们按上面在console中执行发现出错了

    因为这样的代码混淆了函数声明和函数调用,以这种方式声明的函数 a,就应该以 a(); 的方式调用。

    但是括号则不同,它将一个函数声明转化成了一个表达式,解析器不再以函数声明的方式处理函数a,而是作为一个函数表达式处理,也因此只有在程序执行到函数a时它才能被访问。所以,任何消除函数声明和函数表达式间歧义的方法,都可以被解析器正确识别。所以,赋值,逻辑,甚至是逗号,各种操作符都可以告诉解析器,这个不是函数声明,它是个函数表达式。并且,对函数一元运算可以算的上是消除歧义最快的方式,感叹号只是其中之一,如果不在乎返回值,这些一元运算都是有效的

    !function(){alert('iifksp')}()        // true
    +function(){alert('iifksp')}()        // NaN
    -function(){alert('iifksp')}()        // NaN
    ~function(){alert('iifksp')}()        // -1

    //推荐下面这个
    (function(){
      alert('iifksp'})()        

    选哪个好:

    针对这些一元运算符,到底用哪个好呢,测试发现()的性能最优越,但是差别都不是特明显

    所以对于一个库来说用几个这样的符号来说看不出什么影响,所以平常用! + -都可以,就看个人的代码习惯,当然最好还是用()。

  • 相关阅读:
    LightOJ 1239
    LightOJ 1166 Old Sorting 置换群 或 贪心 水题
    vijos 1243 生产产品 DP + 单调队列优化
    POJ 3348 Cows 凸包 求面积
    POJ 1389 Area of Simple Polygons 扫描线+线段树面积并
    POJ 1151 Atlantis 扫描线+线段树
    POJ 1228 Grandpa's Estate 凸包 唯一性
    bzoj 3622 DP + 容斥
    Uva5211/POJ1873 The Fortified Forest 凸包
    POJ 2007 Scrambled Polygon 极角序 水
  • 原文地址:https://www.cnblogs.com/htybky/p/11521793.html
Copyright © 2011-2022 走看看