大家應該寫過下面類似的代碼吧,其實這里我想要表達的是有時候一個方法定義的地方和使用的地方會相隔十萬八千里,那方法執行時,它能訪問哪些變量,不能訪問哪些變量,這個怎么判斷呢?這個就是我們這次需要分析的問題——詞法作用域 liehuo.net
var classA = function(){ this.prop1 = 1;}classA.prototype.func1 = function(){ var that = this, var1 = 2; function a(){ return function(){ alert(var1); alert(this.prop1); }.apply(that); }; a();}var objA = new ClassA();objA.func1();liehuo.net
詞法作用域:變量的作用域是在定義時決定而不是執行時決定,也就是說詞法作用域取決于源碼,通過靜態分析就能確定,因此詞法作用域也叫做靜態作用域。 with和eval除外,所以只能說JS的作用域機制非常接近詞法作用域(Lexical scope)。
下面通過幾個小小的案例,開始深入的了解對理解詞法作用域和閉包必不可少的,JS執行時底層的一些概念和理論知識。 /網
/*全局(window)域下的一段代碼*/function a(i) { var i; alert(i);};a(10);veryhuo.com
疑問:上面的代碼會輸出什么呢?
答案:沒錯,就是彈出10。具體執行過程應該是這樣的 liehuo.net
a 函數有一個形參 i,調用 a 函數時傳入實參 10,形參 i=10
接著定義一個同名的局部變量 i,未賦值
alert 輸出 10生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
![]()