文章目录

  • 原因
  • 一、实例详解 - 方法名与变量名重复
    • 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” 错误解析相关推荐

  1. js编程常见错误:Uncaught TypeError: XXX is not a function解决

    Uncaught TypeError: XXX is not a function解决 后台没有错误,前端一直显示 Uncaught TypeError: withdraw is not a func ...

  2. js编程常见错误:Uncaught TypeError XXX is not a function解决

    Uncaught TypeError: XXX is not a function解决 后台没有错误,前端一直显示Uncaught TypeError: withdraw is not a funct ...

  3. Uncaught TypeError: XXX is not a function解决

    转载:https://blog.csdn.net/u011870547/article/details/52765811 后台没有错误,前端一直显示 Uncaught TypeError: withd ...

  4. 火狐下正常,谷歌、360下js中提示Uncaught TypeError: XXX is not a function

    在火狐浏览器下浏览正常,在谷歌和360中不能正常访问,提示Uncaught TypeError: XXX is not a function,网上查课很多资料,出现的原因也有很多,我出现的这一种情况是 ...

  5. JS异常处理:Uncaught TypeError: xxx is not a function at HTMLAnchorElement.onclick

    JS异常处理:Uncaught TypeError: xxx is not a function at HTMLAnchorElement.onclick  ---- 关于<a>标签调用o ...

  6. 浅谈JS中常见的问题(三)

    往期文章目录 浅谈JS中常见的问题(一) 浅谈JS中常见的问题(二) JS知识总结 往期文章目录 前言 11. 同步和异步的区别 12. JS 判断变量类型的几种方法 13. 如何阻止事件冒泡与默认事 ...

  7. JS中常见的字符串拼接处理

    最近动态的编写界面的时候总是需要不定时的用到js,而字符串的拼接还有在jsp文件获取后台的数据变量是个使用的麻烦,我把我碰到的列举一下,希望对以后看到这个问题的人有所帮助 1. JS获取java后台在 ...

  8. JS报错 Uncaught TypeError: undefined is not a function,解决

    Chrome调试报错:Uncaught TypeError: undefined is not a function,所有的数据都显示不出来 原因正如错误提示:调用了一个没有定义的方法,实际是一个空值 ...

  9. JS匿名函数Uncaught TypeError: x is not a function

    一.背景描述 今天遇到了一个小问题,我要记录一下- 就是这个类似这个亚子的一个代码片段 function test() {console.log('xixi') }; const a = 1 (fun ...

最新文章

  1. linux c++ 程序运行时间,总结UNIX/LINUX下C++程序计时的方法
  2. 电脑桌面便签小工具_iPhone12系列售价曝光,苹果手机上有什么好用的便签记事本软件推荐吗...
  3. python两个二维数组加法_对二维数组的多个列进行Numpy平均
  4. php对象好用吗,在数据库中使用对象的好处_php
  5. android自定义组合view,安卓自定义view之组合view
  6. No repository found containing,eclipse 自动更新erro 解决
  7. lua本学习笔记功能
  8. oracle sql group_con,SQL:Group Functions,GROUP BY,HAVING
  9. Quartz 触发器(SimpleTriggerCronTrigger )配置说明 cronExpression表达式 转
  10. unity3d的下载与安装
  11. python暴力破解六位密码(数字和大小写字母)
  12. 2021年教你如何用笔记本把Windows10系统安装到移动固态硬盘或U盘简易教程
  13. uni-app使用阿里iconfont多色图标
  14. pytorch.chunk
  15. 借助Docker hub自己手动制作镜像(以Nginx镜像为例)
  16. cocos2d-x 添加自定义字体---中文,英文
  17. 简单计算器(PTA)
  18. 关于uni-app的一些坑(日后再做补充)
  19. 【关于谷歌浏览器 无法翻译此网页的解决方法】
  20. erc20 php,无需gas即可归集ERC20的PHP开发包【SmartWallet】

热门文章

  1. LFLytroDecodeImage-从原始lenslet图像解码Lytro光场
  2. 推特引流的一些小诀窍
  3. [OpenCV实战]24 使用OpenCV进行曝光融合
  4. 【C语言】求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一个函数根据求出的最大公约数求最小公倍数。
  5. Unity ForceMode
  6. Android系统日历读取各厂商农历年重复event
  7. mysql备份数据库某表格_mysql数据库的备份以及表格数据之间的复制
  8. 嫦娥五号探测器成功着地,任务取得圆满成功
  9. MySQL字典表的意思_数据库字典表什么意思
  10. 【管理经济学】(2)—机会成本、会计成本