js函数前加分号和感叹号是什么意思?有什么⽤?
⼀般看JQuery插件⾥的写法是这样的
(function($) {
//...
})(jQuery);
今天看到bootstrap的javascript组件是这样写的
!function( $ ){
//...
}( window.jQuery );
为什么要在前⾯加⼀个 " ! " 呢?
我们都知道,函数的声明⽅式有这两种
function fnA(){alert('msg');}//声明式定义函数
var fnB = function(){alert('msg');}//函数赋值表达式定义函数
楼主问题中出现的两个函数,都是匿名函数。通常,我们调⽤⼀个⽅法的⽅式就是 FunctionName()
但是,如果我们尝试为⼀个“定义函数”末尾加上(),解析器是⽆法理解的。
function msg(){
alert('message');
}();//解析器是⽆法理解的
定义函数的调⽤⽅式应该是 msg() ;
如果将函数体部分⽤()包裹起来就可以运⾏并且解析器是不报错的,如:
(function($) {
//...
})(jQuery);
那为什么将函数体部分⽤()包裹起来就可以了呢?
原来,使⽤括号包裹定义函数体,解析器将会以函数表达式的⽅式去调⽤定义函数。也就是说,任何能将函数变成⼀个函数表达式的作法,都可以使解析器正确的调⽤定义函数。⽽ ! 就是其中⼀个,⽽ + - || 都有这样的功能。另外,⽤ ! 可能更多的是⼀个习惯问题,不同的运算符,性能是不同的。
就是为了能省略⼀个字符……
// 这么写会报错,因为这是⼀个函数定义:
function() {}()
// 常见的(多了⼀对括号),调⽤匿名函数:
(function() {})()
// 但在前⾯加上⼀个布尔运算符(只多了⼀个感叹号),就是表达式了,将执⾏后⾯的代码,也就合法实现调⽤
!
function() {}()
在前⾯加上~+-等⼀元操作符也可以。。其实还有好⼏种符合都可以保证匿名函数声明完就⽴即执⾏
var hi = function(){ alert("hi") };
hi();
等于...jquery是什么功能组件
(function(){ alert("hi") })();
!、+和()⼀样的效果可以把换成
!function(){ alert("hi") }();
!⽐()节省⼀个字符,或者说⽐()好看些
我们都知道分号是为了和前⾯的代码隔开,js可以⽤换⾏分隔代码,但是合并压缩多个js⽂件之后,换⾏符⼀般会被删掉,所以连在⼀起可能会出错,加上分号就保险了。
你看到的感叹号,⼀般是在压缩过的js⽂件⾥⾯,因为在匿名函数调⽤的时候,通常我们都是⽤: (function(){})() 的形式,但也可以使⽤另⼀种形式:!function(){}() 前⾯的!号可以换成-+~等等⼀元操作符,从⽽省下了1字节。出处参考:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论