gpt4 book ai didi

javascript - 为什么闭包在这些函数中不起作用?

转载 作者:行者123 更新时间:2023-11-28 13:11:52 25 4
gpt4 key购买 nike

为什么闭包在这里不起作用? createTreeText() 函数不是应该从调用它的函数中获取文本变量吗?我知道我可以在参数中传递它,但为什么我不能通过闭包来做到这一点?

function createTree(){
var text = "example";
text = createTreeText();
console.log(text);
}

function createTreeText(){
var newText = text.toUpperCase(); // error happens here
return newText;
}

createTree();

最佳答案

Isn't the createTreeText() function supposed to take the text variable from function where it's called

不,一点也不。函数在创建变量的范围内关闭变量,而不是在调用变量的范围内。所有函数从调用它们的地方获取的是作为参数传递给它们的信息(有时是 this,具体取决于它们的调用方式以及它们是什么类型的函数)。

这个例子可能会澄清,请参阅评论:

function wrapper() {
var a = Math.random();

function foo() {
// `foo` closes over `a`, because `a` is in scope
// where `foo` was created
console.log("a = " + a);

// `foo` does not close over `b`, because `b` is not in scope
// where `foo` was created
try {
console.log("b = " + b); // throws ReferenceError
} catch (e) {
console.log("error: " + String(e));
}
}

function bar() {
var b = Math.random();
// Calling `foo` here does nothing to grant it access to `b`
foo();
}

bar();
}

wrapper();

关于javascript - 为什么闭包在这些函数中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41791131/

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