ES6 函数执行 中的变量

发布于 2024-02-20 19:03:22 字数 997 浏览 25 评论 0

在函数与全局中对 var 声明的不同处理

简单来说,函数体内的 var 如果用于声明一个已经存在于函数作用域的变量,那么这次声明无效,会被忽略,可参考这里和 详细解释

函数中

function f(x) {
    var x=2
    console.log(x)
}

f(5) //2

等价于

function f(x) {
    x=2
    console.log(x)
}

f(5) //2

全局

let x=5
var x=2

// Identifier 'x' has already been declared

参数与函数体使用同一个块作用域

function fn(x){
    let x
}

// SyntaxError: Identifier 'x' has already been declared

JavaScript 的函数是“非惰性求值”的

// 一般函数声明
function f(x) {
  console.log(x);
}

// 表达式`a=100`是“非惰性求值”的
f(a = 100);

在这个示例中,传入函数 f() 的将是赋值表达式 a = 100 完成计算求值之后的结果。考虑到这个“结果”总是存在“值和引用”两种表达形式,所以 JavaScript 在这里约定“传值”。于是,上述示例代码最终执行到的将是 f(100)。

回顾这个过程,请你注意一个问题:a = 100 这行表达式执行在哪个上下文环境中呢?

答案是:在函数外(上例中是全局环境)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

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