zoukankan      html  css  js  c++  java
  • (function(){})()的用法

    最近在整理javascript 学习,发现这个问题了 ,在网上发现这么个解释 最清楚 最明白 ; 
    (function(){})() 
    相当于先定义 function xx(){},后调用 xx(); ()是最高优先级的,所以先执行function(){}, 这个定义了一个匿名函数,等于xx=function(){} 接着就是调用xx()了; 给个例子 
    JScript code 

    function f1(a){    
                alert(a);              
    }  
    function f2(a) {
                return function(){ 
                               alert(a); 
                           }            
    }                     


    这里的var x=f2 就等于把函数传递给了f2,然后要执行这个函数,就必须加() 也就是x(); 也就是f2()   
    还是

    (function f2(a){   
                  return function(){   
                            alert(a);    
    })();  


    另外还有一个问题 就是命名空间的问题 

    YY = YY||{};---声明一个叫YY的命名空间(定义一个全局的变量) (function() { 
    YY.Lang=function() {------声明一个叫YY.Lang的命名空间(通过全局变量的增加属性的方式把闭包里的对象传到全局变量中,实现代码封装的效果) isUndefined: function(o) { 
      return typeof o === 'undefined';   }, 
    isString: function(o) { 
      return typeof o === 'string';   } };  
    })();  
    ---调用方法 
    alert(YY.Lang.isString('test me')); 

     
    这时候就有人不明了,楼上为什么要加(function() { 和)(); 最外面的这两行,有什么用啊? 

    JScript code

    YY=YY||{}; //---声明一个叫YY的命名空间(定义一个全局的变量)
    //(
    function() { YY.Lang=function() {
    //------声明一个叫YY.Lang的命名空间(通过全局变量的增加属性的方式把闭包里的对象传到全局变量中,实现代码封装的效果) isUndefined:function(o) {returntypeofo==='undefined'; },
     isString:function(o) {returntypeofo==='string'; } }; }
    
    //)();
    //---调用方法
     alert(YY.Lang.isString('test me'));   


    疑问在这:??????    注释掉这两行有什么不一样的呢?不就是申明吗,为什么要用()()执行一下啊?
    答:
    (function(){})()意思是立即执行前一个括号里的function,相当于是一个匿名函数;由于里面的代码的执行,定义了YY.Lang这个对象,所以可以执行alert(YY.Lang.isString('test me'));调用isString方法。
    但是,如果按照你写的  
    functionaa(){..};//只是定义了一个叫aa的函数,但是并没有执行
    alert(YY.Lang.isString('test me'));//执行的时候会报找不到isString的方法。 
    这么写有什么好处??????????????
    (function{})()的写法有个好处,就是能很好的利用javascript的变量的可见范围为执行脚本时节省空间。例如以下写法1和写法2达到的目的是一样的,但是写法1的由于a变量的可见范围只是在匿名函数体内,所以a在执行完这个匿名函数后就释放空间了。但是写法2会一直存在该页面中。
    写法1:
    JScript code

    (function(){vara=2; alert(a); })();


    写法2:
    JScript code

    vara=2; alert(a);



  • 相关阅读:
    pid系统控制算法
    pandas+numpy 对df数据中的某列进行等分分桶操作
    pandas学习
    angular6 数组遍历项进行双向绑定 丢失焦点 问题解决
    TypeScript 之构造器 constructor 方法 methods
    公开便民信息网站收集
    C++11_线程池
    百度网盘信息
    【赵强老师】MongoDB中的索引(下)
    TDSQL 4001 备份故障处理案例
  • 原文地址:https://www.cnblogs.com/gisblogs/p/3962311.html
Copyright © 2011-2022 走看看