zoukankan      html  css  js  c++  java
  • JS中括号的用法

    转自:http://blog.csdn.net/hongmin118/article/details/4584023

    我们在一些JS代码中经常可以看到这样的用法 :
    (function(){})();
    那这些括号是做什么用的呢?
    下面我们来测试一下就知道了

    (function(){alert('zol');});
    运行后,没有反映(相当于第一函数)

    (function(){alert('zol');})();
    运行后,弹出 zol

    (function(){alert('zol');})(alert('wiki'));
    运行后,先弹出wiki,再弹出zol

    (function(){alert('zol');})(alert('wiki'););
    出错,什么也不运行。

    我们从第二个可以看出,第一个括号中的匿名函数执行了,说明第二个括号是用于执行操作,这和我们调用函数的用法一样,比如定义了一个function a(){};我们调用a这个函数是 a();那么a就和这个例子中的第一个括号代表的意思相同,是一个函数体,只是没有名字,我们也叫他匿名函数。
    第三个代码中先弹wiki,说明alert('wiki')是先执行,这个是做为第一个括号的函数的参数来运行了,如果给参数后加分号,当然就出错了,所以第四个代码就不运行了。

    ==================华丽的分隔符========================================

    转自:http://segmentfault.com/q/1010000000117476

    一般看JQuery插件里的写法是这样的

    (function($) {         
      //...  
    })(jQuery);

    今天看到bootstrap的javascript组件是这样写的

    !function( $ ){
      //...
    }( window.jQuery );

    为什么要在前面加一个 " ! " 呢?

    我们都知道,函数的声明方式有这两种

    function fnA(){alert('msg');}//定义函数
    var fnB = function(){alert('msg');}//匿名函数

    楼主问题中出现的两个函数,都是匿名函数。通常,我们调用一个方法的方式就是 FunctionName()

    但是,如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。

    function msg(){
      alert('message');
    }();//解析器是无法理解的

    定义函数的调用方式应该是 msg() ; 那为什么将函数体部分用()包裹起来就可以了呢?

    原来,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。

    另外,用 ! 可能更多的是一个习惯问题,不同的运算符,性能是不同的。

    这些有一篇非常详细的文章,推荐阅读:http://www.swordair.com/blog/2011/10/...

  • 相关阅读:
    洛谷p1017 进制转换(2000noip提高组)
    Personal Training of RDC
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof.
    Asia Hong Kong Regional Contest 2019
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Siberia
    XVIII Open Cup named after E.V. Pankratiev. Ukrainian Grand Prix.
    XVIII Open Cup named after E.V. Pankratiev. GP of SPb
    卜题仓库
    2014 ACM-ICPC Vietnam National First Round
  • 原文地址:https://www.cnblogs.com/tv151579/p/4096288.html
Copyright © 2011-2022 走看看