JavaScript中的匿名函数遇上!会怎么样
通常,我们声明一个函数test){},可以通过test()来调用这个函数。但是,如果我们在这个函数声明的末尾加上(),解析器是无法理解的。
function test(){
console.log('hello world!');
}();//解析器是无法理解的。
那为什么将函数体部分用()包裹起来就可以了呢?
(function test(){
console.log('hello world!');
})(); //输出hello world!
解释器在解释一个语句时,如果以function开头,就会理解为函数声明。而使用括号包裹定义函数体,解析器将会以函数表达式的方式去处理定义的函数,而函数表达式后面又添加了一个()就变成了一个立即执行的函数了。也就是说,任何消除函数声明和函数表达式间歧义的方法,都可以被解析器正确识别。所以,赋值,逻辑,甚至是逗号,各种操作符都可以告诉解析器,并且对函数来说使用一元运算可以算的上是消除歧义最快的方式,常见的感叹号只是其中之一。任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。
例如:
!function () {
console.log('hello world!');
}();//输出hello world
而省略了!的话:
function() {
console.log('hello world!');
}();
就会理解为函数声明,而函数声明没有名字会报错。如果有函数名:
function f() {
console.log('hello world!');
}();
还是会报错,因为function f(){}函数声明会提升,相当于:
function f(){
console.log('hello world!');
}
//其他代码...
(); // 这里报错。
ps:
如果不在乎返回值,这些一元运算都是有效的
+function(){alert('hello world!')}() // NaN
-function(){alert('hello world!')}() // NaN
~function(){alert('hello world!')}() // -1
如有问题,欢迎留言(・∀・)
JavaScript中的匿名函数遇上!会怎么样的更多相关文章
- [转]JavaScript中的匿名函数及函数的闭包
JavaScript中的匿名函数及函数的闭包 原文地址:http://www.cnblogs.com/wl0000-03/p/6050108.html 1.匿名函数 函数是JavaScript中最灵 ...
- JavaScript中的匿名函数及函数的闭包(转)
JavaScript中的匿名函数及函数的闭包 https://www.cnblogs.com/wl0000-03/p/6050108.html 1.匿名函数 函数是JavaScript中最灵活的一种 ...
- JavaScript中的匿名函数及函数的闭包
1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...
- JavaScript 中的匿名函数((function() {})();)与变量的作用域
以前都是直接用前端框架Bootstrap,突然想看看Javascript,发现javascript是个非常有趣的东西,这里把刚碰到的一个小问题的理解做下笔录(废话不多说,上代码). /** * Exa ...
- 【转】JavaScript中的匿名函数及函数的闭包
对闭包理解一直不甚明了,在此特转摘博文一篇以备查用. 原文地址:http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html 相关文章: ...
- javascript中通过匿名函数进行事件绑定
- 在javascript中:(函数()()是一个匿名函数
在javascript中:(函数()()是一个匿名函数,它主要使用函数中的变量范围来避免全局变量,影响整个页面环境,并提高代码兼容性. (函数())是标准函数定义,但不会复制到任何变量.所以有一个没有 ...
- 理解与使用Javascript中的回调函数 -2
在javascript中回调函数非常重要,它们几乎无处不在.像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply() ...
- 理解和使用 JavaScript 中的回调函数
理解和使用 JavaScript 中的回调函数 标签: 回调函数指针js 2014-11-25 01:20 11506人阅读 评论(4) 收藏 举报 分类: JavaScript(4) 目录( ...
随机推荐
- js之获取元素最终css属性
很多时候 我们是不用jquery库的,虽然他很好,获取元素最终的css属性我们可以用:getComputedStyle window.getComputedStyle(element, null).g ...
- selenium java ,执行js改变页面
1.面对页面一些页面上的限制而导致某些选择按钮无法选中的问题 很多时候由于页面上的一些限制会导致我们无法无法正常用webdriver来实现我们手动的正常操作,这时候我们可以通过执行js来适当的改变页面 ...
- PAT 1077 Kuchiguse
1077 Kuchiguse (20 分) The Japanese language is notorious for its sentence ending particles. Person ...
- MapRdeuce&Yarn的工作机制(YarnChild是什么)
MapRdeuce&Yarn的工作机制 一幅图解决你所有的困惑 那天在集群中跑一个MapReduce的程序时,在机器上jps了一下发现了每台机器中有好多个YarnChild.困惑什么时Yarn ...
- MVC框架初识
MVC全名是Model View Controller,即模型-视图-控制器的缩写,一种软件设计典范,用一种业务逻辑,数据,界面显示分离方法组织代码, 将业务逻辑聚集到一个部件里面,在改进和个性化定制 ...
- boost range zhuan
Officialhttp://67.223.234.84/boost_doc/libs/range/doc/utility_class.html#sub_range http://blog.sina. ...
- RAID的基本介绍
一.传统磁盘的劣势 影响计算机性能的组件一般包括:CPU.主板总线IO.内存IO.硬盘IO.网卡IO.现代处理器性能已经很高了,但是计算机整体IO性能较弱,严重影响了计算机性能 现代的计算机总线.内存 ...
- vue-router进阶-3-过渡动效
template: <transition> <router-view></router-view> </transition> 单个路由的过渡 con ...
- vue 关闭浏览器
在开发中的一个需求,vue中关闭浏览器, 直接使用window.close()在chrome.fireFox会不起作用 需要改为一下方式 window.open('about:blank','_sel ...
- 清除微信小程序的缓存
小程序会在本地存储数据,当服务器数据更新后,通常在小程序上显示的还是旧的数据,点击右上角的关闭按钮,再次打开小程序同样没有更新. 怎样才能完全清除小程序的缓存数据? 删除小程序的方法是: 1.第一步: ...