博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bootstrap源码里的function加上了+号
阅读量:6733 次
发布时间:2019-06-25

本文共 798 字,大约阅读时间需要 2 分钟。

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

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

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

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

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

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

function fnA(){alert('msg');}//声明式定义函数 var fnB = function(){alert('msg');}//函数赋值表达式定义函数

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

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

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

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

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

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

就是为了能省略一个字符……

// 这么写会报错,因为这是一个函数定义:function() {}()// 常见的(多了一对括号),调用匿名函数: (function() {})() // 但在前面加上一个布尔运算符(只多了一个感叹号),就是表达式了,将执行后面的代码,也就合法实现调用 !function() {}()
 

转载于:https://www.cnblogs.com/as3lib/p/5559928.html

你可能感兴趣的文章
Mysql基础知识--概述和索引
查看>>
libuv 中文编程指南(四)网络
查看>>
【Android】Parse开发笔记(2)—— 从Mysql导入数据到Parse Data
查看>>
关于using……的一些探讨
查看>>
POJ-1270-Following Orders
查看>>
面试不会的地方
查看>>
SharePoint中 服务器发出意外响应。响应状态代码是"500"。
查看>>
Spring入门(1)——搭建简单的环境
查看>>
HDU-1864:最大报销额(浮点数01背包)
查看>>
Dynamics CRM /365 提示 你的时钟快了
查看>>
基于prototype的输入自动提示autocomplete
查看>>
苹果发布“iOS in the Car”计划,明年与12家车厂推出合作车型
查看>>
链式队列
查看>>
day11-RabbitMQ基本示例
查看>>
PHP socket网络编程
查看>>
python操作mysql数据库注意
查看>>
python 中线程
查看>>
第三章 Selenide测试框架(二)
查看>>
软件过程改进浅谈
查看>>
View的工作原理(一) 总览View的工作流程
查看>>