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
如有问题,欢迎留言(・∀・)
转载于:https://www.cnblogs.com/happypayne/p/7742538.html
JavaScript中的匿名函数遇上!会怎么样相关推荐
- javaScript中的匿名函数
js中的匿名函数 js匿名函数 js中匿名函数的N种写法 直接上代码和截图 <!DOCTYPE html> <html> <head> <meta chars ...
- JavaScript中的匿名函数及函数的闭包
1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...
- 【转】JavaScript中的匿名函数及函数的闭包
对闭包理解一直不甚明了,在此特转摘博文一篇以备查用. 原文地址:http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html 相关文章: ...
- 对javascript中的匿名函数的理解
(function(){//这里的所有变量和函数都属于局部对象 }()); 在javascript中以function开头的语句通常是函数声明.加上了外面的括号(黄色背景)后则创建的是函数表达式. 蓝 ...
- JavaScript匿名函数以及在循环中的匿名函数
一 历史 JavaScript其实是一门奇异的语言,TA的一大特性是没有块级作用域 for(var i=0;i<10;i++){} console.log(i) 大家猜测下值是多少? 答案是 1 ...
- 理解与使用Javascript中的回调函数
在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被"存储"在变量中,能作为函数参数被传递,能在函数中被创建, ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- 【JavaScript】理解与使用Javascript中的回调函数
在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被"存储"在变量中,能作为函数参数被传递,能在函数中被创建, ...
- 什么是JavaScript中的回调函数?
This article gives a brief introduction to the concept and usage of callback functions in the JavaSc ...
最新文章
- oracle循环语句loop,oracle循环语句loop
- 织梦html编辑器有问题怎么办,dede 织梦编辑框显示不出来的问题
- 强大的数据库管理工具Navicat Premium安装教程
- 推荐: 五分钟搞懂Xen、KVM、Qemu间的关系和区别[转载]
- C语言文件读写(2)-文本文件写操作
- SQLYog快捷键大全
- 给新手项目经理的12条建议
- USACO 1.1 Friday the Thirteenth
- Integer类的装箱和拆箱到底是怎样实现的?
- 币安跨链桥在BSC、以太坊和IoTeX主网全面支持IOTX资产
- 如何准确的判断一个数据的类型
- 妙盈科技:ESG数据提供商获融资
- Spring 事务模型
- C1见习工程师(一)
- php获取当前协议domain,汇总php获取根域名方法($_SERVER['SERVER_NAME']、GetUrlToDomain)...
- 聊一哈,新入如何优雅的跟老板打招呼
- oracle 与plc通信,cim系统(com系统和plc的通讯)
- Mac安装jekyll踩坑
- php的amqp扩展 安装(windows) rabbitmq学习篇
- React购物网站项目开发
热门文章
- 看完就会明白windows RT推出的原因、它和window 8到底有些什么区别、微软有什么战略企图--有关于微软Windows RT 你不知道的那些事
- 【opencv学习】SIFT算法的基本使用以及特征匹配
- Python《爬虫初实践》
- linux 格式化u盘_【Ventoy】一个U盘,启动多个系统
- matlab对文本文件的读写
- 【计算机视觉】opencv姿态解算6 理论算法调研 PNP问题 5种算法
- 用Redis存储Tomcat集群的Session
- 差分进化算法_基于差分进化的水泥烧成系统动态优化算法
- java 调用sqlite_java 调用 sqlite 数据库
- pwm调速流程图小车_PWM调速+循迹__智能小车程序