gpt4 book ai didi

javascript - 在 Javascript 中跨不同范围访问变量

转载 作者:行者123 更新时间:2023-11-29 17:52:37 24 4
gpt4 key购买 nike

var todoList = {
todos: []


displayTodos: function () {
console.log(this.todos[i].todoText);
}

addTodo: function (todoText) {
this.todos.push({todoText: todoText});
}
}

这不是完整的程序,但我的问题是:

在 displayTodos 函数中,如何访问 todoText(在控制台日志行中)?

不应该将在 addToDo 函数中声明的 todoText 变量的范围限制在声明它的函数 addToDo 内吗?

谢谢

最佳答案

这与函数的 *context * 有关。不是范围,而是上下文

范围:

这与哪些变量对函数可见有关。

函数可以访问它们的局部变量(在它们的定义体中声明包括作为局部变量添加的任何自变量参数) 它们被调用的封闭范围内的任何变量。

上下文(适用于 OP 问题):

与调用函数的方式或分配给什么对象有关在它被调用/调用时。更具体地说,它定义了函数定义中 this 的值。


一个例子

让我们假设您按如下方式调用这些方法:

todoList.addTodo("some text");
todoList.addTodo("other text");
todoList.dispayTodo(1); // made this singular, see below for explanation
// logs out > "other text"

在上面的例子中,所有三个函数都被调用为对象 todoList 的方法,反过来,两者中的 this 值将引用 todoList 对象。

将包含属性 todoText 的对象插入 this.todos 数组后,您将拥有以下数组:

[
{todosText:"some text"},
{todosText:"other text"}
]

并且您可以通过将正确的索引插入 displayTodo 来访问每个停留元素(尽管对您的代码稍作修改以接受索引作为参数)

var todoList = {
...
displayTodo: function(i) {
console.log(this.todos[i].todoText);
}
}

关于javascript - 在 Javascript 中跨不同范围访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41970294/

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