本题难度系数: ★★★
求结果是多少?
然后再说下,一般不推荐在if里声明变量,为了养成后端相关语言的习惯,每个语句尽量加分号。因为这是一道面试题,所以才这样写,为了增加迷惑性,考查大家的分析能力。
考查技术点: 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里声明变量,为了养成后端相关语言的习惯,每个语句尽量加分号。因为这是一道面试题,所以才这样写,为了增加迷惑性,考查大家的分析能力。