search

Home  >  Q&A  >  body text

javascript - 为什么不能访问到变量a

function Person() {}
Person.prototype = {
    init: function() {
        var a = 1;
        this.first();
    },
    first: function() {
        alert(a);
    }
};
var person1 = new Person();
person1.init();

为什么 a 是未定义的,this.first() 不是相当于闭包吗?能访问外部函数变量

大家讲道理大家讲道理2818 days ago378

reply all(4)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 15:28:21

    闭包内的变量访问是根据闭包创建时所在的作用域决定的,这段代码中函数first并不能访问到init函数作用域内部的a变量,因为这两个函数的作用域是互不包含的。

    关于闭包的具体分析可以看看我的博文:Objective-C与JavaScript中的闭包

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:28:21

    計算機科學中所謂閉包,其實是詞法閉包,換句話說函數定義的上下文中的變量在閉包內同樣可以使用。

    不要記那些通俗易懂的解釋,因爲其 100% 是不嚴謹的,這意味着給自己挖坑。

    記這句話:

    閉包是由函式和與其相關的參照環境組合而成的實體。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:28:21

    定义在一个函数中的函数才称之为闭包函数,而非调用

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:28:21

    function Person() {}
    Person.prototype = {
        a : null,
        init: function() {
            this.a = 1;
            this.first();
        },
        first: function() {
            alert(this.a);
        }
    };
    var person1 = new Person();
    person1.init();
    

    reply
    0
  • Cancelreply