运行JS代码报TypeError: inner is not a function的原因是什么?
报错原因分析
给出的报错代码如下:
var inner = 10; function inner() { console.log("Hey type", typeof inner); } inner()
这个错误是JavaScript的变量/函数提升规则导致的,具体逻辑如下:
- JavaScript代码执行前会先经过预编译阶段,对当前作用域的声明进行提升处理:
- 函数声明的提升优先级高于
var变量声明:预编译阶段会先识别到function inner()的函数声明,此时作用域内的inner标识符指向这个函数 - 后续遇到
var inner的变量声明时,因为已经存在同名的inner标识符,这个变量声明会直接被忽略,不会覆盖已有的函数值
- 函数声明的提升优先级高于
- 进入逐行执行阶段后:
- 第一行代码
var inner = 10是赋值操作,会直接把inner标识符的值从函数修改为数字10 - 执行到
inner()调用时,inner当前存储的是数字类型的值,不是可调用的函数,所以会抛出TypeError: inner is not a function的错误。
- 第一行代码
如果要让代码正常执行,要么调整变量和函数的命名避免冲突,要么调整声明顺序在赋值前调用函数,示例如下:
// 调整顺序,在赋值前调用函数 function inner() { console.log("Hey type", typeof inner); } inner() // 正常输出 var inner = 10;
内容的提问来源于stack exchange,提问作者user16612176
相关产品推荐
相关产品推荐

