js作用域解释下
这两个的区别 为何第一个报错了 感觉是作用域 但是讲不出个所以然 ,有没有具体解惑的
第一种
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
js中引用一个变量时,当前作用域未定义会去上级作用域寻找,你可以简单的理解成一个
{ }
包裹着的是一个作用域。你可以成功运行的那段代码因为上级作用域有个参数是
w
,直接引用了那个变量,不会报错。不能运行的那段,那个function外面就是window了,js找遍了上级没有找到对
w
的定义,报错了第一个报错很明显,w未定义啊。
和作用域有毛关系 问题是值都没传递
仔细看看我下面的俩种写法
=============================
第一种当然报错。
w的作用域在e这个函数内,没有定义
第二种不会报错,可以看看闭包的相关知识。