zoukankan      html  css  js  c++  java
  • Javascript自执行匿名函数(function() { })()的原理浅析

    匿名函数就是没有函数名的函数。这篇文章主要介绍了Javascript自执行匿名函数(function() { })()的原理浅析的相关资料,需要的朋友可以参考下

    函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途。匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数

      下面是一个最常见的自执行函数:

    // 传统匿名函数
    (function() {
    alert('hello');
    })();
     

    这段代码的执行效果就是在页面再载入时弹出:"hello"

      是什么促使它自动执行的?,来看下面的代码

    // 在传统写法上去掉小括号,并在前面加上运算符 ~,!,+,-
    ~function(){
    alert('hello');
    }();
    !function(){
    alert('hello');
    }();
    +function(){
    alert('hello');
    }();
    -function(){
    alert('hello');
    }();
    

      

    这些写法与上文所说的传统方式执行起来并无区别,

      我发现,这些写法的共同点是运算符,其实传统方式的小括号()也属于运算的一种,出现在:a=b*(c+d),

      运算符 + 传递给自生的参数 = 函数自动执行?但有些符号也不支持,比如“=,*,/”号,它自执行的原因还是很神秘,网上也找不到像样的答案

      然后我发现了一个神奇的现象,这些运算符可以无限叠加。。。。。。

    // function前面是特定符号可以无限叠加...
    ~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~~~~~~~~+-!!!!!!+function a(b) {
    alert('hello');
    }();
    

      

    程序正常运行!!!!!!

      但是,有两种情况会报错

        如果连续出现三个及以上的“+”或“-”符号,则会出错;

        如果连续出现两个“+”或“-”符号再接上其他符号,则会出错,例如“++~”,“--+”;

      错误提示:Uncaught ReferenceError: Invalid left-hand side expression in prefix operation (意思是左侧表达式错误)

      然后我用同样的符号来运算一个变量,发现一模一样,这或许已经可以说明是javascript的运算促使函数的自动执行,也可以理解为通过运算来调用这个函数!

      并不是函数自己执行了,而是通过运算来调用这个函数!,但只支持部分运算方式!

      此外,这个自执行函数,未必是匿名函数!看上方的代码,我在运算符后的函数中,定义了函数名称a,并没有什么异常,但也没什么卵用- -!,这个a依然无法被其他方法调用,但我觉得很多人都称其为匿名函数有点不妥!

    以上所述是小编给大家介绍的Javascript自执行匿名函数(function() { })()的原理浅析,希望对大家有所帮助!

  • 相关阅读:
    php环境配置中各个模块在网站建设中的功能
    PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置
    August 17th 2017 Week 33rd Thursday
    August 16th 2017 Week 33rd Wednesday
    August 15th 2017 Week 33rd Tuesday
    August 14th 2017 Week 33rd Monday
    August 13th 2017 Week 33rd Sunday
    August 12th 2017 Week 32nd Saturday
    August 11th 2017 Week 32nd Friday
    August 10th 2017 Week 32nd Thursday
  • 原文地址:https://www.cnblogs.com/mracale/p/6072999.html
Copyright © 2011-2022 走看看