为了账号安全,请及时绑定邮箱和手机立即绑定

请问 js 非严格模式下报错 f is not a function

请问 js 非严格模式下报错 f is not a function

杨魅力 2018-12-20 18:14:29
请问为什么不加严格模式会报TypeError: f is not a function
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

在非严格模式下, 你的代码等价于


var f

f = function() {...}

(function() {

  var f

  if (false) {

    f = function() {...}

  }

  f()

} ())

自执行函数中, f的定义被提前, 离开了if代码块, 但赋值仍在if中, 所以到执行时f是undefined


在严格模式下, 你的代码等价于


let f

f = function() {...}

(function() {

  if (false) {

    let f

    f = function() {...}

  }

  f()

} ())

内部f的定义也是在if中的, 所以f用的是外面的f


查看完整回答
反对 回复 2019-01-15
  • 1 回答
  • 0 关注
  • 1800 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信