1.输出结果undefined
console.log(num) //预解析后,var fn在最前面,fn现在属于变量定义未赋值,所以输出undefined
var num = 100
2.输出结果123
fn(); // 预解析后,把函数定义整个放在最前面,会执行fn()函数
function fn() {
console.log(123);
}
3.第一行的console.log(fn)输出undefined
第二行的fn()会输出报错,不执行之后代码
console.log(fn) //预解析后,var fn在最前面,fn现在属于变量定义未赋值,所以输出undefined
fn() //fn现在属于变量定义未赋值,不属于函数,所以没有这个函数,会报错
var fn = function() {
console.log(123);
}
4.第一个的fun() 输出我是fun函数
第二个的fn() 输出我是 fn 函数
fn()输出时会报错
fun() // 预解析后,把函数定义整个放在最前面,会执行fun()函数
var fn = function() {
console.log('我是 fn 函数')
}
function fun() {
console.log('我是 fun 函数')
}
fn() // 执行fun()函数
fn = 100
fn() // 存放函数的fn变量现在被赋值为100,已经不是函数了所以没有fn这个函数,会报错
5.第一个fn() 会输出结果我是一个fn函数
第二个fn() 会输出结果我是一个fn函数
第三个fn() 会报错
fn() //预解析后把函数定义整个放在最前面,所以会执行函数的代码
function fn() {
console.log('我是一个 fn 函数')
}
fn() //执行函数代码
var fn = 100
fn() //存放函数的fn变量现在被赋值为100,已经不是函数了所以没有fn这个函数,会报错
6.会在执行第一行时就直接报错,不继续执行下面的代码
var a = b //给a初始化赋的值是一个没有定义且没有值的b,这时js中完全没有b这个变量,所以会报错,且中断不执行后面的代码
a = 0
b = 0
console.log(a)
console.log(b)
7.第一个fun()就直接报错,后面代码不执行
var fun = 200
fun() //预解析后,将var fun放在最前面,它是变量定义,没有函数fun,所以报错,不执行后续代码
var fun = function() { //将函数值赋给一个变量,这是变量定义,不是函数定义,函数定义要有函数名
console.log('我是一个 fun 函数')
}
fun()
8.输出undefined
function fn() {
console.log(num) //预解析后,var num放在最前面,但是没有赋值,输出undefined
return //中断函数,不执行下面的代码(下面的var num之所以会放在前面执行,是因为预解析是在代码执行前开始的)
var num = 100
}
fn()
9.输出undefined
console.log(num) //预解析后把var num放在最前面,但没有赋值 ,所以输出undefined
if (false) {
var num = 100
}