javascript - 大家帮我看一下这个JS输出的题目,蒙圈中。。。。
本文介绍了javascript - 大家帮我看一下这个JS输出的题目,蒙圈中。。。。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
下面这段代码:
var a = 0, b = 0, c = 0;
var fn = function(b){
return function(c){
console.log(a++,b++,c++);
}
}
var fn1 = fn(a);
fn1(b);
var fn2 = fn(c);
fn2(a);
fn2(b);
输出的结果为:
0 0 0
1 0 1
2 1 0
为什么是这个结果呢?真的是不理解。路过的帮忙解释一下,谢谢!
解决方案
var a = 0,
b = 0,
c = 0;
var fn = function(b) {
return function(c) {
console.log(a, b, c);
a++;
b++;
c++;
}
}
var fn1 = fn(a);
// 没啥好说的全部打印 0
fn1(b);
// c为0,因为fn函数内部的++操作并不会影响外部的变量
var fn2 = fn(c);
// a为1,因为fn内部并没有a变量,所以a++操作是指向的外部变量
// 此时a作为参数传递,在回调函数中变量为c所以在,回调函数中a,c都是为1的
fn2(a);
// 此时fn函数中的b为1,因为fn的上下文是存在的,上一次调用的fn2函数时b++,影响此时还是有效的
// b为0,因为回调函数内部的b++操作并不影响外部变量
// a前面已经执行了2次++操作所以为2
fn2(b);
把程序稍微修改一下,看得会比较容易一点。这个示例主要是因为外部的变量与函数内部的变量命名相同,理解起来有点绕。
需要好好理解一下变量的作用域。
这篇关于javascript - 大家帮我看一下这个JS输出的题目,蒙圈中。。。。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文