getTodos(function(){
console.log(todos)
});
function getTodos(callback) {
setTimeout(function() {
const todos = [{title:"Walk the dog"},{title:"Feed the cat"}];
callback();
},1000);
};
我认为1秒后执行的回调函数将能够看到todo const。但是翻译告诉我 todos没有定义
我在这里错过了什么吗?
要添加我从其他程序员那里学到的更多知识:“父作用域不是所谓的,而是定义的”
var todos = [{title:"Curb the dog"},{title:"Tickle the cat"}]
var cb = function(){
console.log(todos);
}
getTodos(cb);
function getTodos(callback) {
setTimeout(function() {
const todos = [{title:"Walk the dog"},{title:"Feed the cat"}];
callback();
},1000);
};
答案 0 :(得分:4)
当然它是未定义的,因为
function(){
console.log(todos)
}
超出了getTodos
函数的范围。
要修复它,您可以将todos
传递给回调函数:
getTodos(function(todos){
console.log(todos)
});
function getTodos(callback) {
setTimeout(function() {
var todos = [{title:"Walk the dog"},{title:"Feed the cat"}];
callback(todos);
}, 1000);
}
Protip:const todos
不表示todos
中的值是常量且无法更改。
快速检查:
const list = ["Apple", "Banana"];
list[2] = "Coffee Beans";
list; // ["Apple", "Banana", "Coffee Beans"]
list.splice(0,1);
list; // ["Banana", "Coffee Beans"]
list = "something else"; // Uncaught TypeError
换句话说,todos
是一个不变的参考,但可能不是你想象的那样。