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
似懂非懂,以后彻底理解在续吧,汗!