腾讯js面试题2

来源:互联网 发布:去马赛克的软件 编辑:程序博客网 时间:2024/05/23 19:12
本题难度系数: ★★★

考查技术点:  1). 变量提升  2). IIFE 3). 作用域与作用域链 4). 变量查找

    var name = 'World!'    ;(function () {        if (typeof name === 'undefined') {            var name = 'Jack'            console.log(name)        } else {            console.log(name)        }    })()

求结果是多少?

运行得知:


接下来我们分析下,首先我们先来了解下,什么是IIFE,其实就是立即调用函数表达式,这4个字母分别为四个单词的首字母缩写(Immediately Invoked Function Expression)),就是让函数立即执行了。

当程序运行到函数时,会先执行变量提升步骤,也就是说把var name执行在if前面了,然后再执行if……else语句,所以if里面的条件就成立了,因为变量name被提升了,但并为赋值,所以当然他的typeof是undefined了啊。

此时等价于下面语句:

    var name = 'World!'    ;(function () {        var name;        if (typeof name === 'undefined') {            name = 'Jack'            console.log(name)        } else {            console.log(name)        }    })()

然后再说下,一般不推荐在if里声明变量,为了养成后端相关语言的习惯,每个语句尽量加分号。因为这是一道面试题,所以才这样写,为了增加迷惑性,考查大家的分析能力。

原创粉丝点击