JS中常见的 “Uncaught TypeError: XXXX is not a function” 错误解析
文章目录
- 原因
- 一、实例详解 - 方法名与变量名重复
- 1、首先看代码:
- 2、输出结果:
- 3、输出解析说明:
- 4、实际输出步骤:
- 二、实例详解 - 方法名或者变量名 各自重名
- 1、代码如下:
- 2、执行步骤解析:
- 3、结论
原因
除了函数本身有错之外,还有一种很奇怪的情况:函数本身没有错,但是运行时就是不能正常运行。这种情况与javascript的特性有关:变量与函数声明前置的优先级。
一、实例详解 - 方法名与变量名重复
1、首先看代码:
console.log(x)
console.log(x());
var x=1;
function x(){console.log(5);
}
console.log(x)
console.log(x());//此时x变成了一个变量
2、输出结果:
function x(){console.log(5);}
5
1
Uncaught TypeError: x is not a function
3、输出解析说明:
- 第一次输出x时,输出的是x函数,但是x变量的声明在x函数之前,就算要输出也应该输出的是undefined,为什么会输出函数?js上下文中无非就是变量、函数、函数参数,那么js解释器在对其上下文进行解释执行时分为三个阶段来进行:
声明阶段
、初始化阶段
、执行阶段
。 - 针对js上下文,首先会进行声明阶段,声明阶段中的特点是声明前置;
- 声明又会包括变量声明前置和函数声明前置,鉴于以上代码的输出结果,我们可以得出函数声明前置优先于变量声明前置的特点,并且如果变量名和函数名冲突会忽略变量的声明,因此
声明过得变量名或函数名不会重复声明
,这样也可以很好地解释为什么第一次输出的是函数而不是undefined。
4、实际输出步骤:
根据js的这些特点我们可以将以上代码解析成如下:
//声明阶段
function x(){//函数声明console.log(5);
}
var x;//变量声明,因为x已经声明过了,此处不进行声明(忽略)
//执行阶段
console.log(x); // 1
console.log(x()); //2
x=1;
console.log(x); // 3
console.log(x()); //4
如上代码所述,js将变量和函数的声明前置,然后再执行代码。
- 第二次输出时,因为声明阶段已经声明过名为x的函数,所以在执行阶段中调用x函数,会执行函数体中的内容。
- 第三次输出时,输出1,因为x被赋值为1.
- 第四次输出时,因为x此时是一个变量而不是一个函数,所以js无法解释“变量()”这样的格式,就会提示“x is not a function”。
二、实例详解 - 方法名或者变量名 各自重名
1、代码如下:
如果js代码中有同名的函数或同名的变量时,程序如何运行,如下代码:
console.log(x)
console.log(x());
var x=1;
var x=100;
function x(){console.log(5);
}
function x(){console.log(3);
}
console.log(x)
console.log(x());//此时x变
2、执行步骤解析:
根据js解析代码的特点,将代码解析成如下:
//声明阶段
function x(){//函数声明//console.log(5);此句会被下句代码覆盖console.log(3);
}
var x;//变量声明,因为x已经声明过了,此处不进行声明(忽略)
//执行阶段
console.log(x);
console.log(x());
x=1;
x=100;//x的值被覆盖
console.log(x);
console.log(x());
所以输出的结果就是:
function x(){console.log(3);
}
3
undefined // todo 这里待解释 希望大佬来指点
100
Uncaught TypeError: x is not a function
3、结论
针对变量名同名或函数名同名的情况,我们又可以得出一个特点:如果声明了同名的函数其定义会被后者覆盖,声明了同名的变量其值也会被后者覆盖
JS中常见的 “Uncaught TypeError: XXXX is not a function” 错误解析相关推荐
- js编程常见错误:Uncaught TypeError: XXX is not a function解决
Uncaught TypeError: XXX is not a function解决 后台没有错误,前端一直显示 Uncaught TypeError: withdraw is not a func ...
- js编程常见错误:Uncaught TypeError XXX is not a function解决
Uncaught TypeError: XXX is not a function解决 后台没有错误,前端一直显示Uncaught TypeError: withdraw is not a funct ...
- Uncaught TypeError: XXX is not a function解决
转载:https://blog.csdn.net/u011870547/article/details/52765811 后台没有错误,前端一直显示 Uncaught TypeError: withd ...
- 火狐下正常,谷歌、360下js中提示Uncaught TypeError: XXX is not a function
在火狐浏览器下浏览正常,在谷歌和360中不能正常访问,提示Uncaught TypeError: XXX is not a function,网上查课很多资料,出现的原因也有很多,我出现的这一种情况是 ...
- JS异常处理:Uncaught TypeError: xxx is not a function at HTMLAnchorElement.onclick
JS异常处理:Uncaught TypeError: xxx is not a function at HTMLAnchorElement.onclick ---- 关于<a>标签调用o ...
- 浅谈JS中常见的问题(三)
往期文章目录 浅谈JS中常见的问题(一) 浅谈JS中常见的问题(二) JS知识总结 往期文章目录 前言 11. 同步和异步的区别 12. JS 判断变量类型的几种方法 13. 如何阻止事件冒泡与默认事 ...
- JS中常见的字符串拼接处理
最近动态的编写界面的时候总是需要不定时的用到js,而字符串的拼接还有在jsp文件获取后台的数据变量是个使用的麻烦,我把我碰到的列举一下,希望对以后看到这个问题的人有所帮助 1. JS获取java后台在 ...
- JS报错 Uncaught TypeError: undefined is not a function,解决
Chrome调试报错:Uncaught TypeError: undefined is not a function,所有的数据都显示不出来 原因正如错误提示:调用了一个没有定义的方法,实际是一个空值 ...
- JS匿名函数Uncaught TypeError: x is not a function
一.背景描述 今天遇到了一个小问题,我要记录一下- 就是这个类似这个亚子的一个代码片段 function test() {console.log('xixi') }; const a = 1 (fun ...
最新文章
- linux c++ 程序运行时间,总结UNIX/LINUX下C++程序计时的方法
- 电脑桌面便签小工具_iPhone12系列售价曝光,苹果手机上有什么好用的便签记事本软件推荐吗...
- python两个二维数组加法_对二维数组的多个列进行Numpy平均
- php对象好用吗,在数据库中使用对象的好处_php
- android自定义组合view,安卓自定义view之组合view
- No repository found containing,eclipse 自动更新erro 解决
- lua本学习笔记功能
- oracle sql group_con,SQL:Group Functions,GROUP BY,HAVING
- Quartz 触发器(SimpleTriggerCronTrigger )配置说明 cronExpression表达式 转
- unity3d的下载与安装
- python暴力破解六位密码(数字和大小写字母)
- 2021年教你如何用笔记本把Windows10系统安装到移动固态硬盘或U盘简易教程
- uni-app使用阿里iconfont多色图标
- pytorch.chunk
- 借助Docker hub自己手动制作镜像(以Nginx镜像为例)
- cocos2d-x 添加自定义字体---中文,英文
- 简单计算器(PTA)
- 关于uni-app的一些坑(日后再做补充)
- 【关于谷歌浏览器 无法翻译此网页的解决方法】
- erc20 php,无需gas即可归集ERC20的PHP开发包【SmartWallet】
热门文章
- LFLytroDecodeImage-从原始lenslet图像解码Lytro光场
- 推特引流的一些小诀窍
- [OpenCV实战]24 使用OpenCV进行曝光融合
- 【C语言】求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一个函数根据求出的最大公约数求最小公倍数。
- Unity ForceMode
- Android系统日历读取各厂商农历年重复event
- mysql备份数据库某表格_mysql数据库的备份以及表格数据之间的复制
- 嫦娥五号探测器成功着地,任务取得圆满成功
- MySQL字典表的意思_数据库字典表什么意思
- 【管理经济学】(2)—机会成本、会计成本