js作用域解释下

发布于 2022-09-07 21:17:43 字数 602 浏览 27 评论 0

这两个的区别 为何第一个报错了 感觉是作用域 但是讲不出个所以然 ,有没有具体解惑的
第一种


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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

吖咩 2022-09-14 21:17:43

js中引用一个变量时,当前作用域未定义会去上级作用域寻找,你可以简单的理解成一个{ }包裹着的是一个作用域。
你可以成功运行的那段代码因为上级作用域有个参数是w,直接引用了那个变量,不会报错。
不能运行的那段,那个function外面就是window了,js找遍了上级没有找到对w的定义,报错了

陌路终见情 2022-09-14 21:17:43
function e (v) {
    console.log(w)
}

第一个报错很明显,w未定义啊。

躲猫猫 2022-09-14 21:17:43

和作用域有毛关系 问题是值都没传递

仔细看看我下面的俩种写法

function e (v) {
    console.log(v)
}
 function a(z){
    return function b(y) {
        return function c(x) {
            return function d(w) {
                return e(w)
            }
        }
    }
}
a(1)(2)(3)(4)   //输出4

=============================

function e (v) {
    console.log(v)
}
 function a(z){
    return function b(y) {
        return function c(x) {
            return function d(w) {
                return e
            }
        }
    }
}
a(1)(2)(3)(4)(5)  //输出5
凡间太子 2022-09-14 21:17:43

第一种当然报错。

function e (v) {
    console.log(w)
}

w的作用域在e这个函数内,没有定义

第二种不会报错,可以看看闭包的相关知识。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文