logfunc「定義されていない」のはなぜですか?
var logfunc = function(obj) {
return function() {
console.log(obj)
}
}
t += '<a onclick="logfunc(this)"><</a>'
logfunc「定義されていない」のはなぜですか?
var logfunc = function(obj) {
return function() {
console.log(obj)
}
}
t += '<a onclick="logfunc(this)"><</a>'
への参照longfuncは、グローバル スコープの外で宣言されている場合はアクセスできません。フィドル
省略してグローバルスコープで変数を直接宣言することを推奨しているわけではありませんvarが、良い例になります。
function setupStuff() {
var logfunc = function(obj) { //defined within setupStuff scope
/*...*/
}
t += '<a onclick="logfunc(this)"><</a>';
}
function setupStuffDifferently() {
logfuncB = function(obj) { //defined in the global scope
/*...*/
}
t += '<a onclick="logfuncB(this)"><</a>';
}
のように個別に宣言された関数を見たいと思います
t += '<a onclick="logfunc(this)"><</a>';
function logfunc(obj) { //this would work when assigned through `onclick`
/*...*/
}
オプションが利用可能な場合は、jQuery などのライブラリを使用することをお勧めします。これにより、クリック イベントの割り当てと処理がより柔軟になります。
「logfunc が定義されていません」というエラーが発生します。logfuncこれは、グローバル (つまりwindow) スコープ内になく、HTML 要素属性を使用してバインドされた関数がグローバルである必要があるためです。
次のように言うことで、それを回避できます。
window.logfunc = function(obj) {
return function() {
console.log(obj)
}
};
logfuncしかし、呼び出す関数を返すだけで、関数を呼び出すことconsole.logに<a>なっていることがわからないため、それはあなたが思っていることをしません。function() { console.log(obj) }それは単にそれを真の値として見るだけです。私はあなたが欲しいと思います:
window.logfunc = function(obj) {
console.log(obj)
};
リンクをクリックしてコンソール メッセージを生成する場合。
onclick「 DOM との違いは何ですか」に関する限り、次のようになります。
onclick呼び出すことができますaddEventListener。JavaScript スニペットを文字列として一緒に貼り付けたい場合は、この制限を回避できますが、これは厄介です。addEventListenerを使用して呼び出しを簡単に元に戻すことができます。removeEventListener属性からイベント ハンドラーを削除すると、onclick追加するよりも厄介な文字列のラングリングが発生します。onclickすると、HTML と JavaScript が絡み合い、メンテナンスの悪夢につながります。