猿问

一段关于闭包问题的代码,求大神解释?

function f1(){
    var n=999;
    nAdd=function(){n+=1}
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
  nAdd();
  result(); // 1000

不是很懂这段代码

  1. 为什么第一次result的时候结果是999,这段代码不是按顺序执行的么?

  2. 还是说nAdd()必须调用才能使用,不然直接跳过直接运行alert?

  3. nAd没有var ,所以是全局变量,所以需要调用?

var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
      };
    }
  };
  alert(object.getNameFunc()());

这个程序的结果是

"The Window";

不是很明白为什么?

var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };
    }
  };
  alert(object.getNameFunc()());

这个程序的结果是

"My Object",

上面的都是我在网上看见的,是一段关于闭包的文章,网址如下

http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

一颗猕猴桃
浏览 1115回答 1
1回答

Walk_

问题一:通常函数必须调用才能使用,除非是立即执行函数。不带var 定义的是全局问题二:嵌套函数指向依然是global,严格模式下是: undefined.问题三:为了解决上面的问题,我们先将this捕获在一个变量中,这里是that变量,来解决这个问题。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答