zoukankan      html  css  js  c++  java
  • 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" onclick="test()" value="button"/>
            <input type="button" onclick="tests()" value="button"/>
        </body>
    </html>

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

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

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

    写的很好 

  • 相关阅读:
    博客搬家了
    Unity Shader学习笔记(一)坐标变换
    cs106a编程方法学作业解答(4)(Hangman)
    cs106a编程方法学 作业解答(4)
    cs106a编程方法学作业解答(3)
    暗黑破坏神2修改盒子公式的方法
    cs106a编程方法学作业解答(2)
    cs106a编程方法学作业解答 (1)
    MAC入手达成
    深圳面试一周记录——.NET(B/S)开发
  • 原文地址:https://www.cnblogs.com/sajiao/p/9260077.html
Copyright © 2011-2022 走看看