function test() {
var str = 'adarsh';
// f1(); - This gives an error.
$('body').click(function f1() {
console.log(str);
});
}
test();Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>Run Code Online (Sandbox Code Playgroud)
我想知道为什么上面的代码片段在我尝试访问f1()函数测试时会出错.
作用f1范围是什么?
我知道它不是窗口,因为window.f1在执行上面的代码片段后我无法访问.
注意:我知道我可以先声明函数f1然后在click函数中传递对它的引用.但是,如果我们无法通过该名称访问它们,我想知道在这种情况下命名"匿名"函数的重点是什么.
函数声明将:
命名函数表达式(这是你在这里)将:
因此,有两种方法可以访问使用命名函数表达式创建的函数:
click(),所以click函数可以用它做一些事情在范围内没有进一步的参考test.
但是,如果我们无法通过该名称访问它们,我想知道在这种情况下命名"匿名"函数的重点是什么.
正如我所说,该变量对于递归调用它很有用.
名称(与变量不同)也很有用,因为它显示在调试器中.处理由十几个有用的名称组成的堆栈跟踪比仅仅十几个重复的名称要容易得多(anonymous function).