腾讯js面试题2

本题难度系数: ★★★

考查技术点:  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里声明变量,为了养成后端相关语言的习惯,每个语句尽量加分号。因为这是一道面试题,所以才这样写,为了增加迷惑性,考查大家的分析能力。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值