Open tonyzheng121 opened 7 years ago
一般看JQuery插件里的写法是这样的
(function($) { //... })(jQuery);
今天看到bootstrap的javascript组件是这样写的
!function( $ ){ //... }( window.jQuery );
为什么要在前面加一个 " ! " 呢?
我们都知道,函数的声明方式以下这两种:
function fnA() {alert('msg');} //声明式定义函数 var fnB = function() {alert('msg');} //函数赋值表达式定义函数
但是,如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。
function msg() { alert('message'); }(); //解析器是无法理解的
定义函数的调用方式应该是 msg() ; 如果将函数体部分用()包裹起来就可以运行并且解析器是不报错的,如:
原来,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。
另外,用 ! 可能更多的是一个习惯问题,不同的运算符,性能是不同的。
一般看JQuery插件里的写法是这样的
今天看到bootstrap的javascript组件是这样写的
为什么要在前面加一个 " ! " 呢?
我们都知道,函数的声明方式以下这两种:
但是,如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。
定义函数的调用方式应该是 msg() ; 如果将函数体部分用()包裹起来就可以运行并且解析器是不报错的,如:
原来,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。
另外,用 ! 可能更多的是一个习惯问题,不同的运算符,性能是不同的。
参考