这两个的区别 为何第一个报错了 感觉是作用域 但是讲不出个所以然 ,有没有具体解惑的
第一种
function e (v) {
console.log(w)
}
function a(z){
return function b(y) {
return function c(x) {
return function d(w) {
return e
}
}
}
}
a(1)(2)(3)(4)(5)
// 报错
第二种
function a(z){
return function b(y) {
return function c(x) {
return function d(w) {
return function e (v) {
console.log(w)
}
}
}
}
}
a(1)(2)(3)(4)(5)
// 4
js中引用一个变量时,当前作用域未定义会去上级作用域寻找,你可以简单的理解成一个
{ }
包裹着的是一个作用域。你可以成功运行的那段代码因为上级作用域有个参数是
w
,直接引用了那个变量,不会报错。不能运行的那段,那个function外面就是window了,js找遍了上级没有找到对
w
的定义,报错了