据我所知,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)
我的假设是,由于对象是函数,声明对象内部的函数可以计算为在不同的函数范围内声明,即使没有花括号.但我希望对此有一个明确的答案.
在你的第二个例子中,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)
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |