2014-02-16 116 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