2014-02-16 109 views
1

我最近問了question關於函數級範圍塊級別範圍之間的區別。答案很全面,幫助我瞭解了功能級範圍,並介紹了提升的概念。JavaScript調用函數和範圍

現在我再次審議。這個例子是一個jQuery .ready()函數和一個在其中聲明的事件處理程序。也就是說,爲什麼在.click()事件處理程序中聲明的變量不會被掛起到.ready()函數?那是因爲.click()不是.ready()函數的屬性嗎?並且在.click()內聲明的變量僅在該功能之前懸掛?

例子:

$(‘document’).ready(function(){ 
    $(‘selector’).click(function(){ 
     var x = 10; //discussed variable 
    }); 
}); 

我想教給JS腳本自己,但這個概念是真的很難,我明白了。有人可以用一個簡單的例子來解釋,或者請提供相關的鏈接。

感謝

+1

僅供參考,使用'$(document)'而不是'$('document')' –

+0

是的,當然。 – Dimt

回答

4

.click事件處理程序是一個匿名函數,因此,像任何其他功能都有自己的範圍。在其中聲明的變量保持在該範圍內。

吊裝只適用於函數 - 變量不泄漏到封閉範圍內。如果他們這樣做,那麼功能範圍將是無用的...

+0

好吧,我想我已經明白了,我已經與前面提到的問題中用作示例的_loop_塊或_if_語句塊混淆了。謝謝。 – Dimt

+0

@Dimt是的,不幸的是,你被另一個問題的接受答案中的一個評論誤導了 - 在內部函數中聲明的變量在封閉函數中是不可訪問的。 – Alnitak

+0

但是答案很好,只是我誤解了它。再次感謝。 – Dimt