立即自执行函数和分组操作符
2015-11-24 14:29
190 查看
今天遇到函数自执行的情况,排查了一会才发现问题根源,特地百度了一下,结果发现一个很有意思的小问题。
function f(){console.log('called')}(1)
按照我的常规想法,上述例子在控制台里应该输出的是called,因为后面的小括号代表了该函数立即执行,但是实际上它输出为1
这是因为我们经常会出现的一种语法错误:
function g(){ }()
期望是立即调用一个具名函数表达式,结果是声明了函数 g。末尾的括号作为分组运算符,必须要提供表达式做为参数。
所以实际上在控制台的执行应该是这样的:
function f(){}
(1)
这样的两个操作,那自然就输出的是1 了。。记住括号的含混使用——它可以用来执行一个函数,还可以做为分组运算符来对表达式求值。
参考自知乎:https://www.zhihu.com/question/20249179
function f(){console.log('called')}(1)
按照我的常规想法,上述例子在控制台里应该输出的是called,因为后面的小括号代表了该函数立即执行,但是实际上它输出为1
这是因为我们经常会出现的一种语法错误:
function g(){ }()
期望是立即调用一个具名函数表达式,结果是声明了函数 g。末尾的括号作为分组运算符,必须要提供表达式做为参数。
所以实际上在控制台的执行应该是这样的:
function f(){}
(1)
这样的两个操作,那自然就输出的是1 了。。记住括号的含混使用——它可以用来执行一个函数,还可以做为分组运算符来对表达式求值。
参考自知乎:https://www.zhihu.com/question/20249179
相关文章推荐
- 由九度1502引出的对二分查找的一点总结v1.0
- 注册IIS
- log4j配置
- 使用局部索引来提升 PostgreSQL 的性能
- Sublime Text(转移)
- jQuery插件实现无缝滚动特效
- 通达OA系统故障解决案例记录
- JdbcTemplate.CLASS
- 通达OA系统故障解决案例记录
- 【Quick 3.3】资源脚本加密及热更新(三)热更新模块
- openssh之 openssh.spec
- cocos2d-x开发学习笔记(一)
- Comparison method violates its general contract!
- 了解和配置 PAM
- JdbcOperations 综合
- pigeon物联网平台- developer portal web服务设计及实现
- 面试题(十二)
- Qt Creator中常用的快捷键总结
- 11/24 初学网页设计
- 微软宣布Win7/8.1考证日期从2016年1月31日延至2016年7月31日