为什么不能调用括号内声明的函数?

Bar*_*iva -3 javascript

据我所知,JS是函数作用域而不是块作用域,这意味着在(括号)内声明的对象不会创建不同的执行上下文.然而:

$('#firstBtn').click(function first() {
    console.log("first activated");
});

$('#secondBtn').click(function() {
    console.log("second activated");
    first();
});
Run Code Online (Sandbox Code Playgroud)

退货Reference Error function is undefined.该函数first在括号内声明,因此从技术上讲,它应该可用于从声明的范围调用它的其他函数.

但这有效:

var callDat = $('#firstBtn').click(function first() {
    console.log("first activated");
});

$('#secondBtn').click(function() {
    console.log("second activated");
    callDat.first();
});
Run Code Online (Sandbox Code Playgroud)

我的假设是,由于对象是函数,声明对象内部的函数可以计算为在不同的函数范围内声明,即使没有花括号.但我希望对此有一个明确的答案.

Jam*_*iec 5

在你的第二个例子中,first你得到的不是你上面声明的那个 - 它是jQuery.first所有jQuery对象可用的方法.

这是可检查的 - 单击"第一个",然后单击下面的"第二个"不会从单击到第二个按钮输出"首次激活".

var callDat = $('#firstBtn').click(function first() {
    console.log("first activated");
});

$('#secondBtn').click(function() {
    console.log("second activated");
    callDat.first();
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="firstBtn">First</button>

<button id="secondBtn">Second</button>
Run Code Online (Sandbox Code Playgroud)