我的问题是,为什么以下代码打印1而不是500;而 当回调被调用并且找不到变量计数时,它不是首先查看func1的上下文吗?
function func1(cb){
let count = 500
cb()
}
let count = 1
function func2() {
console.log(count);
}
func1(func2)
答案 0 :(得分:0)
Let是范围变量。在func1中,它只是函数作用域变量。您应该使用一个全局范围变量,而不是创建一个新的全局范围变量。
答案 1 :(得分:0)
这是范围的问题,第一个count
的范围与第二个范围不同,不同的是:
let count = 1
function func2() {
console.log(count);
}
function func1(cb){
count = 500
cb()
}
func1(func2)
您得到了您所期待的,
而且,如果您这样做:
let count = 1
function func2() {
console.log(count);
}
function func1(cb){
let count = 500
cb()
}
func1(func2)
您正在创建一个新的变量计数,其中第一个计数的范围不同,这意味着它将打印1
答案 2 :(得分:0)
1。 func1(func2)
您正在将函数func2作为参数传递给func1
2。让计数= 1
您已声明全局变量
3。。您已经将func2传递给func1作为参数,但是您在此没有做任何事情。您已经在函数中声明了变量,但它超出了func2的范围
function func1(cb){
let count = 500
cb()
}
4。。仅func2 知道全局计数变量,因此它将将控制台1 代替控制台func1 >
function func2() {
console.log(count);
}