首页 > 试题广场 >

以下代码输出的值为?

[问答题]
以下代码输出的值为?( ) 
function f1() {
    var n = 100;
     nAdd = function() {
         n += 1
     }
     function f2() {
         alert(n);
     }
     return f2;
 }
 var result = f1();
 result();
 nAdd();
 result();

首先
var result = f1();
创建了一个全局的nAdd函数(没有var修饰),功能是将f1中的n+1。
而函数f1返回给变量result的内容是
function f2(){
alert(n);
}
因此执行result(),会弹出n的值
这里用到了js中的闭包,外层函数的局部变量如果被内层函数使用,那么外层函数在返回后,如果它的内层函数依然可以被访问,那么外层函数的那个局部变量不会被回收。
因此弹出的n值为100
接着执行了nAdd();
将n的值增加了1,即101
接着result()弹出的n值就变成了101

发表于 2015-09-07 16:21:05 回复(0)
这javascript里面的典型的闭包题目: 具体详情猛戳链接: http://www.nowcoder.com/discuss/2085

javascript 执行result(); 这个方法后会在堆上创建一个nAdd()方法,因此外部可以直接调用。
根据这个可知:调用 result();弹出100,调用nAdd();n=100;要+1之后n=101,调用 result(); 弹出101
编辑于 2015-09-07 17:26:25 回复(0)
1.  100
2.  什么都木有
3.  101
发表于 2015-03-20 11:19:52 回复(0)
发表于 2015-09-18 10:40:07 回复(0)
wgl头像 wgl
100,其他undefined

发表于 2015-09-07 21:10:36 回复(0)
var result = f1();并没有执行f1里面的函数 nAdd和f2
f1最后return的是f2
所以result()就相当于是 function f2() { alert(n);}();这时才是执行了f2,弹出100;
nAdd();只是让n+1变成101
result();再次执行result()弹出n是101


编辑于 2015-09-07 17:26:11 回复(0)
100 
101
undefined
发表于 2015-09-07 16:16:58 回复(0)
undefined
发表于 2015-09-07 11:32:52 回复(0)
100 
101
undefined
发表于 2015-01-04 16:27:03 回复(0)