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/...
JS中括号的用法的更多相关文章
- js事件监听器用法实例详解
这篇文章主要介绍了js事件监听器用法,以实例形式较为详细的分析了javascript事件监听器使用注意事项与相关技巧,需要的朋友可以参考下本文实例讲述了js事件监听器用法.分享给大家供大家参考.具体分 ...
- js事件监听器用法实例详解-注册与注销监听封装
本文实例讲述了js事件监听器用法.分享给大家供大家参考.具体分析如下: 1.当同一个对象使用.onclick的写法触发多个方法的时候,后一个方法会把前一个方法覆盖掉,也就是说,在对象的onclick事 ...
- JS的简单用法
JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...
- JS和jQuery用法区别
目录 JS和jQuery用法区别 外观区别 查找元素 操作标签 操作内容 操作属性 操作位置 操作样式 事件 JS和jQuery用法区别 外观区别 jQuery与JS最直观的区别就是外观上jQuery ...
- JS定时器的用法及示例
JS定时器的用法及示例 目录 js 定时器的四个方法 示例一 示例二 示例三 js 定时器的四个方法 setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式.方法会不停地调用函 ...
- json对象数组的创建、遍历、添加、删除、修改、js的splice()用法
本文链接:https://blog.csdn.net/houfengfei668/article/details/79843625 )第二种方式:手动构造json对象数组 )for )用splice方 ...
- 转 谈谈JS里的{ }大括号和[ ]中括号的用法,理解后就可以看懂JSON结构了。
一.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数. 如:var LangShen = {"Name":"Langshen",&qu ...
- js中replace用法
js中replace的用法 replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则 ...
- 前端之js的常用用法
js生成标签 // 将标签添加到i1里面 var tag = document.createElement('input'); tag.setAttribute('type', 'text'); ta ...
随机推荐
- 初识GeneXus产品
本人由于工作原因接触了GeneXus产品,从使用到现在也有些年头了.从刚开始的不熟悉到现在使用GeneXus开发了很多项目,慢慢也总结了一些经验,当然中间也走了很多的弯路.对于在国内同样使用GeneX ...
- Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型
Java反射机制demo(一)——实例化Class对象,通过对象获得包名和类型 使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便. public static void main(S ...
- cogs——2478. [HZOI 2016]简单的最近公共祖先
2478. [HZOI 2016]简单的最近公共祖先 ★☆ 输入文件:easy_LCA.in 输出文件:easy_LCA.out 简单对比时间限制:2 s 内存限制:128 MB [题 ...
- 使用AppCompat项目模版
使用AppCompat项目模版 从Android API 22开始,谷歌推荐使用AppCompatActivity来构建带标题栏的App,而不是原有的ActionBarActivity.如果用户想 ...
- XamarinForms教程构建XamarinForms开发环境
构建XamarinForms开发环境 所谓Xamarin.Forms的开发环境,就是指在基本硬件和数字软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称SDE.对于任何的程 ...
- [BZOJ4817][SDOI2017]树点涂色(LCT+DFS序线段树)
4817: [Sdoi2017]树点涂色 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 692 Solved: 408[Submit][Status ...
- [BZOJ4423][AMPPZ2013]Bytehattan(对偶图+并查集)
建出对偶图,删除一条边时将两边的格子连边.一条边两端连通当且仅当两边的格子不连通,直接并查集处理即可. #include<cstdio> #include<algorithm> ...
- POJ 3904 JZYZOJ 1202 Sky Code 莫比乌斯反演 组合数
http://poj.org/problem?id=3904 题意:给一些数,求在这些数中找出四个数互质的方案数. 莫比乌斯反演的式子有两种形式http://blog.csdn.net/out ...
- 【tarjan+拓扑】BZOJ3887-[Usaco2015 Jan]Grass Cownoisseur
[题目大意] 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在路径中无论出现多少正整数次对答案的贡献均为1) [思路] 首先 ...
- 【动态规划/多重背包问题】POJ2392-Space Elevator
方法同POJ1014-Dividing,唯一不同点在于每一种block有最大限定高度a,故要以a为关键字进行排序,使得最大高度小的在前,否则最大高度小的再后可能放不上去. #include<io ...