var a = 9
function fn() {
a = 0
return function (b) {
return b + a++
}
}
var f = fn()
console.log(f(5))
console.log(fn()(5))
console.log(f(5))
console.log(a)
输出:5
5
6
2
题解:
2.
var a = 1
function fn(a) {
console.log(a)
var a = 2
function a() {
}
}
fn(a)
输出:function a() {}
ƒ a() {
}
题解:
var a = 1
function fn(a) {
/**
* 形参赋值
* a = 1
* 变量提升
* var a; (无效)
* function a...;(声明无效,但是需要给a赋值为函数)
* a = function...
*/
console.log(a) // => 函数
var a = 2 // => a = 2
function a() {
// 已经声明加赋值,无效
}
}
fn(a)
注意点:函数执行有参数时,先进行形参赋值后进行变量提升
var a = 0,
b = 0
function A(a) {
A = function (b) {
console.log(a + b++)
}
console.log(a++)
}
A(1)
A(2)
输出:1
4
图解:
注意点:函数找上级作用域时,有一个准则:它的亲爹妈是谁,上级作用域就是谁,即它在哪儿创建的,上级作用域就是谁。