JS中 (function(){...})()立即执行函数
(function(){...})()
(function(){...}())
这是两种js立即执行函数的常见写法。
基本概念:
函数声明:function fname(){...}; 使用function关键字声明一个函数,再指定一个函数名。
函数表达式:var fname=function(){...}; 使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予给一个变量。
匿名函数:function(){}; 使用function关键字声明一个函数,但未给函数命名。(匿名函数也属于函数表达式。)
(匿名函数作用很多,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序等。。)
关于函数声明和函数表达式的区别:
1:函数声明的Function declaration Hoisting(换成人话就是函数声明提升),函数表达式不具备这点,它需要被js代码解析到当前这行时才可以调用。
2:函数表达式后边加 ()立即调用该函数,函数声明不可以,它只能以fname()调用。
例子:
fName();
function fName(){...}//正确,函数声明提升,所以 fName()可以写在函数声明之前。 fName();
var fName=function(){...}//错误,函数表达式不具备函数声明提升。 var fName=function(){...}();//正确,函数表达式后边加()立即调用函数。 function fName(){...}();//错误,函数声明必须用fName()调用。
//这行代码被解析为两部分: 1函数声明 function fName(){...}, 2分组表达式(),这表达式有误,因为括号内没有表达式, function (){...}();//匿名函数不可以这么调用,因为function(){...}被当做了声明,声明不可以直接()调用。
顺便说下立即调用IIFE(Immediately Invoked Function Expression):
(function(){...})() 和 (function(){...}()) 是没区别的!
传统的定义函数为:
function foo(){...} //这是定义,Declaration,只是让解释器知道其存在,不会运行
foo(); //这是语句,解释器遇到语句会运行它
为什么要IIFE呢? 1:传统的方法啰嗦。 2:传统的方法污染全局命名空间
于是 我们这么写 function foo(){...}(); 这样写行么。。不行,为啥,因为function foo(){...}这部分只是声明,对解释器来说,像是你写了串字符串“function foo(){...}”,它需要的是解析函数,可以用比如eval()来执行它才可以。所以把()直接放声明后边是不行的,错误语法!
然而,我们距离成功相当接近,只需要把函数声明变成函数表达式就可以了。方法非常多,最常见的方法是用一对() 包裹起来。 (function foo(){...})();
这就等价于
var foo= function(){...};
foo();
当然 还有很多别的方法可以把声明变成表达式:
!function foo(){...}();
+function foo(){...}();
void function() {...}();
需要全局对象的时候,可以这么传, 举例:
void function(global){
console.log("a's value is: "+global.aa); //可以获取全局对象中aa的值
}(this)
var aa=10;
(function(a){
console.log("hello world"+a);
})(aa);
JS中 (function(){...})()立即执行函数的更多相关文章
- 【repost】js中(function(){…})()立即执行函数写法理解
摘要: javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ...
- js中(function(){…})()立即执行函数写法理解
文章摘自https://my.oschina.net/u/2331760/blog/468672?p={{currentPage+1}} 摘要: javascript和其他编程语言相比比较随意,所以j ...
- js中(function(){…})()立即执行函数写法理解(转载oschina)
( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到 ...
- IIFE-js中(function(){…})()立即执行函数写法理解
介绍IIFE IIFE的性能 使用IIFE的好处 IIFE最佳实践 jQuery优化 在Bootstrap源码(具体请看<Bootstrap源码解析>)和其他jQuery插件经常看到如下的 ...
- 深入理解js中的立即执行函数(function(){…})()
javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( f ...
- JS中的自执行函数
本来规划的是2013年,狠狠的将JS学习下,谁知计划赶不上变化,计划泡汤了.13年的我对JS来说可以说是属于跟风,对它的理解和认识也仅仅是皮毛而已,也是因为要完成<ArcGIS API for ...
- JS中的立即执行函数
JS 立即执行函数可以让函数在创建后立即执行,这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行. 1.立即执行函数的写法 立即执行函数通常有下面两种写法: //第一种写法 (func ...
- js中的延迟执行和定时执行
在js中,延迟执行函数有两种,setTimeout和setInterval,用法如下: function testFunction(){Console.log('hovertree.com');} s ...
- 深入理解javascript中的立即执行函数(function(){…})()
投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-06-12 我要评论 这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是 ...
随机推荐
- struts2的使用入门
虽然说Struts2现在已经被SpringMVC框架淘汰了,据说是有很多安全漏洞.但是Struts2作为一个成熟的MVC框架,还是有必要了解一下的,好歹是曾经风光一时的前辈,老祖宗的东西不能丢下,里面 ...
- Spark Core知识点复习-1
Day1111 Spark任务调度 Spark几个重要组件 Spark Core RDD的概念和特性 生成RDD的两种类型 RDD算子的两种类型 算子练习 分区 RDD的依赖关系 DAG:有向无环图 ...
- python实现AES加密
pip install pycryptodomex 需要安装pycryptodomex模块 aes加密 from Cryptodome.Cipher import AES from binascii ...
- TensorFlow的数据读取机制
一.tensorflow读取机制图解 首先需要思考的一个问题是,什么是数据读取?以图像数据为例,读取的过程可以用下图来表示 假设我们的硬盘中有一个图片数据集0001.jpg,0002.jpg,0003 ...
- React学习之路之创建项目
React 开发环境准备 IDE工具 visual studio code 开发环境 开发环境需要安装nodejs和npm,nodejs工具包含了npm. nodejs下载官网:https://nod ...
- aspx页面,后端通过Attributes.Add给textbox添加事件时,传参失效问题。
测试一:------------------------------------------------------------------------------------------------ ...
- Composer更新与清除缓存命令
一.更新命令 composer self-update --preview 二.清除缓存命令 composer clearcache 操作如下图所示:
- APP手势密码绕过
之前写的文章收到了很多的好评,主要就是帮助到了大家学习到了新的思路.自从发布了第一篇文章,我就开始筹备第二篇文章了,最终打算在07v8首发,这篇文章我可以保障大家能够学习到很多思路.之前想准备例子视频 ...
- uni-app项目配置记录
新建项目 直接使用编辑器快速新建,具体方法很简单,官方文档很详细,这里不在叙说 配置项目: 项目搭建好了之后,我们配置一些 api 和 router,这些直接在插件市场上面进行配置,非常好用 封装的r ...
- 金蝶BOS元模型分析
对一些需求变化多样的产品而言,做好可变性设计是非常重要的.国外做得好的有Siebel,国内有金蝶的BOS,实际上金蝶的BOS很多理念跟Siebel是相似的,呵呵...他们都是采用MDD的方式来解决可变 ...