JavaScript立即执行函数报错--立即执行函数原理分析
JavaScript立即执行函数报错
1.’()‘在JavaScript环境中有提升运算符优先级和执行函数的作用如果直接在JavaScript环境中执行‘()’,环境会报出语法错误提示。
2.’()‘运算符出现在语句开始或者运算符后边会被当做函数表达式优先执行;如果’()’运算符出现在其他函数表达式后边则会被当做执行函数的命令运行。
3.简单的立即执行一个函数,先声明再执行。
4.将函数声明写在window.onload的回调函数中。
5.将函数指针声明在一个变量中,然后对变量做执行操作。
6.JavaScript要求声明函数时必须声明函数名,如果声明函数没有声明函数名,则会报语法错误的提示。
7.如果在匿名函数后直接跟’()’,因为函数声明提升的原因,环境会当做直接运行’()‘处理,报出语法错误提示。
8.将一个匿名函数声明在‘()‘内部,环境不会对这个函数声明做提升,而是将整个括号内的内容当做一个函数表达式处理
9.在函数表达式声明的函数后边直接跟’()’,即可被当做函数执行符解析。
10.同样,在函数表达式声明的函数前边添加运算符,便会对函数执行的返回值进行相应运算在这里插入图片描述
11.在函数表达式声明的函数里边返回的同样是函数,那么在立即执行函数的执行符后边便可以继续添加执行符进行链式执行。
错误原因排查:
console.log('Is nan finite :' + Number.isFinite(NaN))
//将isFinite部署到Number的原型上(function (global) {
let global_isFinite = global.isFinite
Object.defineProperty(Number,'myIsFinite',{ value : function (value) { return typeof value === 'number' && global_isFinite(value) }, configurable : true, enumerable : false, writable : true
})})(global)
console.log('Test myIsFinite :' + Number.myIsFinite(432))
错误:
代码直接执行便会抛出以下错误
C:\.js:19
(function (global) {^
TypeError: console.log(...) is not a functionat Object.<anonymous> (C:\Personal\Projects\ES6Projects\Number.js:19:1)at Module._compile (internal/modules/cjs/loader.js:689:30)at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)at Module.load (internal/modules/cjs/loader.js:599:32)at tryModuleLoad (internal/modules/cjs/loader.js:538:12)at Function.Module._load (internal/modules/cjs/loader.js:530:3)at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)at startup (internal/bootstrap/node.js:283:19)at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
分析:
综上,错误中提示console.log()的返回值不是一个函数,所以不能执行。
在立即执行函数前边的函数调用结束后,由于JavaScript的不需要换行结束符的特性,环境会将console.log()和后边的立即执行表达式一同执行,把包裹匿名函数的’()'当做一个函数执行标志符,把匿名函数当做函数参数传送给console.log()的返回值执行。
解决方案:
console.log('Is nan finite :' + Number.isFinite(NaN));
//将isFinite部署到Number的原型上(function (global) {
let global_isFinite = global.isFinite
Object.defineProperty(Number,'myIsFinite',{ value : function (value) { return typeof value === 'number' && global_isFinite(value) }, configurable : true, enumerable : false, writable : true
})})(global)
console.log('Test myIsFinite :' + Number.myIsFinite(432))
在console.log()后边添加一个’;'作为换行符,环境在执行的时候便不会将立即执行函数和前边的console.log()函数放在一起执行。
JavaScript立即执行函数报错--立即执行函数原理分析相关推荐
- mysql 自定义函数报错_Mysql自定义函数报错解决方法
[最近研究mysql数据库性能的相关问题,为了对比不同版本之间的差别.笔者找了一台测试服务器升级了该服务器的mysql数据库进行测试,在升级mysql过程中遇到了一些问题并将其 1.在MySql中创建 ...
- mysql 自定义函数报错_Mysql自定义函数报错解决方法 | 学步园
1.在MySql中创建自定义函数报错信息如下: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READ ...
- 报错型sql注入原理分析
0x00:前言 关于sql注入,经久不衰,现在的网站一般对sql注入的防护也相对加强了,2016年的***测试报告中,出现最多的是xss(跨站脚本***)和明文传输等,但是对sql注入的利用方式,也相 ...
- python class函数报错_Python 的函数是第一类 First-Class 对象
Python的函数是第一类对象(first-class object).你可以把一个函数复制给变量,或者把函数存储在一个结构中.可以像参数一样把函数传递进另一个函数,还可以从一个函数中返回另一个函数. ...
- matlab rank函数报错,Matlab signrank函数(Wilcoxon signed rank test)中的矛盾结果[重复]
下面是我提出的算法和基准算法的误差: >> [algo_err benchmark_err] ans = 0.3000 0.2000 0.1000 0.1000 0.1000 0.1000 ...
- 数据库执行sql报错Got a packet bigger than 'max_allowed_packet' bytes及重启mysql
准备在mysql上使用数据库A,但mysql5经过重装后,上面的数据库已丢失,只得通过之前备份的A.sql重新生成数据库A. 1.执行sql报错 在执行A.sql的过程中,出现如下错误:Got a p ...
- ffmpeg avcodec_encode_video2 函数报错
ffmpeg avcodec_encode_video2 函数报错 参考:https://blog.csdn.net/shuihappy1/article/details/71721374 总结此次出 ...
- 立即执行函数报错Uncaught TypeError: (intermediate value) is not a function.
立即执行函数报错Uncaught TypeError: (intermediate value) is not a function. 文章目录 立即执行函数报错Uncaught TypeError: ...
- HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...
最新文章
- 《看透springmvc源码分析与实践》读书笔记一
- tensorflow教程 学习笔记 之 Eager execution 急切执行
- 《Python游戏编程快速上手》第三章-猜数字游戏
- [FWT] 时隔一年再回首FWT(快速沃尔什变换),我终于不再是个门外汉
- 安装应用程序时,提示以前的某个程序安装挂起的解决方法
- 创造型模式——抽象工厂模式
- EMC测试仪器_电巢学堂:单片机系统EMC测试和故障排除
- 风控人最容易被误解的一个风险管理板块
- 微信5.0公众平台企业服务号和订阅号怎样申请?
- 苹果ipa签名工具免越狱下载_苹果签名——超级篇
- 利用pymupdf编辑修改pdf
- vue 使用高德地图标记坐标,去除高德水印logo
- 4个单词,谷歌返回16个SQL注入漏洞
- 电脑硬盘中文件丢失怎样才能找回?硬盘数据丢失能恢复吗
- Android apps浅析01-Amazed:一个简单但令人上瘾的加速度为基础的大理石指导游戏。...
- loc函数、iloc函数、df.drop()函数的用法
- 自研数据库CynosDB存储系统如何实现即时恢复
- day17_自动化的框架搭建
- 《TCP/IP 详解 卷1:协议》第 3 章:链路层
- Cluster群集三类:NLB,CLB,MSCS