javascript - 在哪些对象上定义函数的局部范围内的变量?

标签 javascript

所以在下面的代码中,y 定义在什么对象上?它输出到三个,如下所示;当然 var y 是局部范围的,所以我认为变量 y 的范围是对象 sx。但仍然给我 undefined.. 我知道 alert(y) 会给我三个,但这不是我的问题。我想知道它是在什么对象上定义的,如果它在像下面的代码这样的函数中是局部作用域的。

var s = function x() {
    var y = 3;
    alert(y); // y is defined on what object? //results 3
    alert(window.y); //local scope so obviously this won't be true
    alert(s.y); //undefined? why //expected 3 
    alert(x.y); //undefined? why //expexted 3
}
s();

最佳答案

您可以这样想 - 每次调用函数时,都会创建一个新的匿名对象,其中包含该函数的所有局部变量。

当你说 s.x 时,它指的是函数 s(这也是它自己的对象),而不是上一段中的匿名对象。注意如何只有一个 s 函数,但它可以被调用多次,每次都创建一个新的匿名对象。

这是您的代码在幕后的实际样子*:

var s = function x(_ctx) {
   _ctx.y = 3;
   alert(_ctx.y); // locals are looked up in _ctx
   alert(window.y); // 
   alert(s.y); // not looking in _ctx, but in s
   alert(x.y); // ditto, as x === s
}

s({});

*) 好吧,在某种程度上..

关于javascript - 在哪些对象上定义函数的局部范围内的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47334532/

相关文章:

javascript - 如何使用 express-graphql 抛出多个错误?

javascript - 使用 JavaScript 制作转发到包含日期的 URL 的网页?

javascript - onClick onClick on "a"如果它在 react 中有一些子元素,则标签无法正常工作

javascript - Javascript 中数字加数字为 NaN

php - MongoDB - 组合多个命令来发送和返回一个请求

JavaScript:没有函数/parens-parens/未知语法的参数列表

c# - knockout 下拉列表数据绑定(bind)在 ajax 调用中不起作用

javascript - 如果 JavaScript 弹出窗口打开,如何编写 Watir 条件循环来单击 "OK"按钮?

javascript - 删除 IDD 图表上的轴

javascript - 为什么这个回调没有访问外部作用域的正确值?