function Person() {} Person.prototype = { init: function() { var a = 1; this.first(); }, first: function() { alert(a); } }; var person1 = new Person(); person1.init();
为什么 a 是未定义的,this.first() 不是相当于闭包吗?能访问外部函数变量
a
this.first()
光阴似箭催人老,日月如移越少年。
闭包内的变量访问是根据闭包创建时所在的作用域决定的,这段代码中函数first并不能访问到init函数作用域内部的a变量,因为这两个函数的作用域是互不包含的。
关于闭包的具体分析可以看看我的博文:Objective-C与JavaScript中的闭包
計算機科學中所謂閉包,其實是詞法閉包,換句話說函數定義的上下文中的變量在閉包內同樣可以使用。
不要記那些通俗易懂的解釋,因爲其 100% 是不嚴謹的,這意味着給自己挖坑。
記這句話:
閉包是由函式和與其相關的參照環境組合而成的實體。
定义在一个函数中的函数才称之为闭包函数,而非调用
function Person() {} Person.prototype = { a : null, init: function() { this.a = 1; this.first(); }, first: function() { alert(this.a); } }; var person1 = new Person(); person1.init();
闭包内的变量访问是根据闭包创建时所在的作用域决定的,这段代码中函数first并不能访问到init函数作用域内部的a变量,因为这两个函数的作用域是互不包含的。
关于闭包的具体分析可以看看我的博文:Objective-C与JavaScript中的闭包
計算機科學中所謂閉包,其實是詞法閉包,換句話說函數定義的上下文中的變量在閉包內同樣可以使用。
不要記那些通俗易懂的解釋,因爲其 100% 是不嚴謹的,這意味着給自己挖坑。
記這句話:
定义在一个函数中的函数才称之为闭包函数,而非调用