據我所知,JS是函數作用域的,而不是作用域的範圍,這意味着在(括號內)聲明的對象不會創建不同的執行上下文。但是:爲什麼你不能調用括號內聲明的函數?
$('#firstBtn').click(function first() {
console.log("first activated");
});
$('#secondBtn').click(function() {
console.log("second activated");
first();
});
返回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();
});
我的假設是,由於對象是函數,聲明一個對象內部的功能可以算作聲明不同的功能範圍內,即使沒有大括號。然而,我希望對此有一個明確的答案。
在'函數first(){''first''是從它自己調用函數時創建的別名。 'first'不能從'first'之外訪問。 – Tushar
看看[命名函數表達式揭祕](https://kangax.github.io/nfe/)。命名函數表達式!==函數聲明。對於第二個例子,你跳到完全錯誤的結論。 –
我的不好,第二個例子不起作用。然而,在我提出「解決方案」之前,我已經考慮過這個問題,所以我認爲它不應該被刪除,雖然可能是爲了不讓更多的讀者分心我的原始查詢。 –