当前位置: 首页 > news >正文

JavaScript (function (){}()) 与(function(){})()

function(){} 可以理解为它是一个定义的方法 只是让浏览器知道  有这么一个存在 并不会执行  执行时要带() 

一般我们都会这样子写 

var a=function(){} ; a();

如果要整合写的话  那么就是 (function(){})()  这样子就相当于 var a=function(){} ; a(); 定义了方法 并且执行了

如果你不写function 前面的括号  那么对于浏览器来说 你只是声明定义了一个方法  并不会执行  而且这个方法还是错误的(这里暂且不提这些了) 

其实最外层的()就相当于 eval()函数 来执行括号以内的逻辑代码  可以百度一下JavaScript eval() 函数

那我们现在回头看(function(){}())

 

(function(){}()) 其实可以这样子看 我只是声明定义了一个方法  并不会执行  而且这个方法还是错误的 编译不会通过 但是我用eavl() 来执行就可以了

所以 (function(){}()) 就等与 eavl(function (){}()) 等于(function(){})() 等于 var a=function(){} ; a(); 其实都是声明了 在使用


有兴趣的话 可以自己试一下  这是我写的测试代码

 

<html>
    <head>
        <meta http-equiv=Content-Type content="text/html;charset=utf-8">
        <title>hello builder</title>
        <script type="text/javascript">
            function test(){
                var person={};
                    (function(p){
                        var name="";
                        p.SetName=function(b){
                            name=b;
                        }
                        p.GetName=function(){
                            return  name;
                        }
                    }(person))
                    person.SetName("撒娇的小熊")
                    alert(person.GetName())
            }
            
                function tests(){
                var person={};
                eval(
                    function(p){
                        var name="";
                        p.SetName=function(b){
                            name=b;
                        }
                        p.GetName=function(){
                            return  name;
                        }
                    }(person))
                    person.SetName("撒娇的小熊")
                    alert(person.GetName())
            }
        </script>
    </head>
    <body>
        <input type="button" οnclick="test()" value="button"/>
        <input type="button" οnclick="tests()" value="button"/>
    </body>
</html>

弱弱说一句 写这些代码 是为了了解闭包的 

大家有兴趣想了解闭包 可以去查阅

 https://www.cnblogs.com/wangfupeng1988/p/3977924.html

写的很好 

 

转载于:https://www.cnblogs.com/sajiao/p/9260077.html

相关文章:

  • python assert 不退出_Pytest中断言的重要性,就不需要我重复了吧
  • IDEA中Lombok插件的安装与使用
  • python坦克大战_python资料领取:尚学堂201903期python全栈(0基础到就业)
  • 【leetcode】88. 合并两个有序数
  • aix么把占用的端口释放掉_UNIX系统如何释放被异常占用的端口 - 河北分行(秦永峰)...
  • redis 多维度排序_解决Redis Cluster模式下的排序问题
  • python基础学习01
  • 不同平台安装python方式一样_大厦的基石,成为一个Python工程师的第一步——安装Python...
  • vue 多页面应用例子_用vue构建多页面应用
  • 6.7 二分查找
  • oracle手工收集awr报告_oracle手工生成AWR报告方法
  • 《杜拉拉升职记》//TODO
  • php缓存accestoken_php微信开发(1):缓存access_token的方法
  • git 更新代码到本地
  • python subprocess使用_python subprocess使用-阿里云开发者社区
  • 分享一款快速APP功能测试工具
  • 【React系列】如何构建React应用程序
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • CSS相对定位
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Javascript编码规范
  • Java比较器对数组,集合排序
  • linux学习笔记
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • node入门
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 大快搜索数据爬虫技术实例安装教学篇
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 技术:超级实用的电脑小技巧
  • 京东美团研发面经
  • 入门级的git使用指北
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 温故知新之javascript面向对象
  • 译米田引理
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #ifdef 的技巧用法
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #Z2294. 打印树的直径
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2.2w字)前端单元测试之Jest详解篇
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .net Application的目录
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net MySql
  • .Net 知识杂记
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • @GlobalLock注解作用与原理解析
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [BT]BUUCTF刷题第8天(3.26)