JS 函数的执行时机

120 阅读1分钟

JS函数在执行的时候,函数所处的位置不同,执行的结果就会各不相同。

下面我们通过几个例子来看一下,函数的执行时机对结果会产生怎样的影响。

  • 例1:
let a = 0;
function fn(){
    console.log(a)
}

问:以上结果输出多少?

答:不会输出,因为函数没有调用

  • 例2:
let a = 0;
function fn(){
    console.log(a)
}
fn()

问:以上结果输出多少?

答:很明显,当然是打印0

  • 例3:
let a = 0;
function fn(){
    console.log(a)
}
a = 2
fn()

问:以上结果输出多少?

答:因为函数调用在a变量重写赋值之后,所以结果打印2

  • 例4:
let a = 0;
function fn(){
    console.log(a)
}
fn()
a = 2

问:以上结果输出多少?

答:对比例3,这次函数调用在a变量重新赋值之前,所以结果是打印0

  • 重难点
for(var i = 0; i < 10; i++) {
	setTimeOut(function(){
		console.log(i)
	})
}
// 输出 10 10 10 10 10 10 10 10 10 10

for(let i = 0; i < 10; i++) {
	setTimeOut(function(){
		console.log(i)
	})
}
// 输出 0 1 2 3 4 5 6 7 8 9

百度回答:

第一个变量i是用var声明的,在全局范围内有效,所以全局中只有一个变量i,每次循环时,setTimeOut定时器里指的是全局变量i,而循环里的十个setTimeOut是在循环结束后才执行,所以输出十个10。 第二个变量i是用let声明的,当前的i 只在本轮循环中有效,每次循环的i其实都是一个新的变量,所以setTImeOut定时器的里面的i其实不是同一变量,所以输出0123456789

似懂非懂,以后彻底理解在续吧,汗!