这段代码输出什么为什么?

var name = 'World!';

(function () {

    if (typeof name === 'undefined') {

        var name = 'Jack'

        console.log('Goodbye ' + name)

    } else {

        console.log('Hello ' + name)

    }

})()
阅读 2.1k
3 个回答

输出Goodbye Jack

个人理解:

  1. 在立即执行函数里的name得到变量提升,在typeof name === 'undefined'前定义但尚未赋值
  2. 通过1得出typeof name === 'undefined'true,因此进入if内并对立即执行函数里的name进行赋值
  3. 因此输出为Goodbye Jack

赞同楼上的答案。

  1. 立即执行函数里的name得到变量提升
  2. 我们换个问题

    1. 删除var

      1. 这时内外的name同一个变量
        clipboard.png
    2. var 变 let
      1.这个结果是不是想不到?
      clipboard.png

楼上说的都对,变量提升
你的代码实际上就是下面这样:

var name = 'World!';

(function () {
    //****************************
    var name;
    //****************************
    if (typeof name === 'undefined') {

        name = 'Jack'

        console.log('Goodbye ' + name)

    } else {

        console.log('Hello ' + name)

    }

})()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题