gpt4 book ai didi

javascript - 为什么在这种情况下内部函数无法访问外部变量?

转载 作者:行者123 更新时间:2023-11-30 09:48:03 24 4
gpt4 key购买 nike

根据这段代码:

class Thing {
constructor() {
this.bar = (typeof foo !== "undefined"? foo : null); // (3)
}

static create() {
var foo = arguments[0];
return new Thing();
}
}

新的 Thing 可以通过两种方式创建:直接使用 new Thing 或使用 Thing.create()

第二种方式创建时,声明了一个新的变量string。从理论上讲,它应该在 return 语句的所有范围内可见,但在 Thing.constructor() 中(在 Thing.create( )) 未看到 string。并且 Thing.prototype.bar 始终为 null

为什么会这样?


这里inner()函数中看到的:

(function outer() {
var foo = 5;

(function inner() {
alert(foo);
})()
})();

最佳答案

Theoretically, it should be visible within all the scope down to the return statement

没有。

它不会对同一范围内调用的任何函数可见。我将对同一范围内创建的任何函数可见。

并且在此示例中,constructor() 函数的作用域高于 string 变量。

这会起作用:

class Thing {
constructor(prop) {
this.prop = prop;
}

static create() {
return new Thing(arguments[0]);
}
}

顺便说一下,这只是语法糖:

function Thing(prop) {
this.prop = prop;
}
Thing.create = function () {
return new Thing(arguments[0]);
};

关于javascript - 为什么在这种情况下内部函数无法访问外部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37929411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com