質問編集履歴

5

追記ではjQueryの実装に対する反応が無いと判断し、自己解答に投稿。このため、該当の追記箇所を削除

2015/09/16 17:15

投稿

sounisi5011
sounisi5011

スコア697

test CHANGED
File without changes
test CHANGED
@@ -181,61 +181,3 @@
181
181
 
182
182
 
183
183
  可能であれば、「第一引数に受けたDOM Nodeにclickイベントを定義」する、質問本文冒頭のコードと同じ動作をする循環参照を解決したコードを例示していただければ有難いです。
184
-
185
- ---
186
-
187
-
188
-
189
- [jQuery 1.11.3](http://code.jquery.com/jquery-1.11.3.js)の実装を見たところ、以下のようにしてメモリリークを回避しているようです。
190
-
191
- (4306~4417行目)
192
-
193
- ```JavaScript
194
-
195
- /**
196
-
197
- * @param {Node} targetNode
198
-
199
- */
200
-
201
- function clickCaptcha(targetNode) {
202
-
203
- var eventHandle = function () {
204
-
205
- var targetNode = eventHandle.elem;
206
-
207
-
208
-
209
- console.log(targetNode);
210
-
211
- };
212
-
213
- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
214
-
215
- eventHandle.elem = targetNode;
216
-
217
-
218
-
219
- // Bind the global event handler to the element
220
-
221
- if (targetNode.addEventListener) {
222
-
223
- targetNode.addEventListener('click', eventHandle, false);
224
-
225
- } else if (targetNode.attachEvent) {
226
-
227
- targetNode.attachEvent('onclick', eventHandle);
228
-
229
- }
230
-
231
-
232
-
233
- // Nullify elem to prevent memory leaks in IE
234
-
235
- targetNode = null;
236
-
237
- }
238
-
239
- ```
240
-
241
- この処理は、循環参照の解決策としてアリなのでしょうか。

4

jQuery 1.11.3の実装を元にしたコードを追加

2015/09/16 17:15

投稿

sounisi5011
sounisi5011

スコア697

test CHANGED
File without changes
test CHANGED
@@ -170,8 +170,6 @@
170
170
 
171
171
  冒頭のコードを、循環参照が発生せず、また変数`targetNode`を参照できるようにするには、どのようにすれば良いでしょうか。
172
172
 
173
-
174
-
175
173
  ---
176
174
 
177
175
 
@@ -183,3 +181,61 @@
183
181
 
184
182
 
185
183
  可能であれば、「第一引数に受けたDOM Nodeにclickイベントを定義」する、質問本文冒頭のコードと同じ動作をする循環参照を解決したコードを例示していただければ有難いです。
184
+
185
+ ---
186
+
187
+
188
+
189
+ [jQuery 1.11.3](http://code.jquery.com/jquery-1.11.3.js)の実装を見たところ、以下のようにしてメモリリークを回避しているようです。
190
+
191
+ (4306~4417行目)
192
+
193
+ ```JavaScript
194
+
195
+ /**
196
+
197
+ * @param {Node} targetNode
198
+
199
+ */
200
+
201
+ function clickCaptcha(targetNode) {
202
+
203
+ var eventHandle = function () {
204
+
205
+ var targetNode = eventHandle.elem;
206
+
207
+
208
+
209
+ console.log(targetNode);
210
+
211
+ };
212
+
213
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
214
+
215
+ eventHandle.elem = targetNode;
216
+
217
+
218
+
219
+ // Bind the global event handler to the element
220
+
221
+ if (targetNode.addEventListener) {
222
+
223
+ targetNode.addEventListener('click', eventHandle, false);
224
+
225
+ } else if (targetNode.attachEvent) {
226
+
227
+ targetNode.attachEvent('onclick', eventHandle);
228
+
229
+ }
230
+
231
+
232
+
233
+ // Nullify elem to prevent memory leaks in IE
234
+
235
+ targetNode = null;
236
+
237
+ }
238
+
239
+ ```
240
+
241
+ この処理は、循環参照の解決策としてアリなのでしょうか。

3

動作が違うコードでは問題を解決できない趣旨を追記

2015/08/25 22:25

投稿

sounisi5011
sounisi5011

スコア697

test CHANGED
File without changes
test CHANGED
@@ -169,3 +169,17 @@
169
169
 
170
170
 
171
171
  冒頭のコードを、循環参照が発生せず、また変数`targetNode`を参照できるようにするには、どのようにすれば良いでしょうか。
172
+
173
+
174
+
175
+ ---
176
+
177
+
178
+
179
+ 循環参照について理解できていないため、動作の違うサンプルを例示されても修正して活用できません。
180
+
181
+ このため、コメントにて私の書いたコードを例示し、何度も指導していただく形になってしまいます。
182
+
183
+
184
+
185
+ 可能であれば、「第一引数に受けたDOM Nodeにclickイベントを定義」する、質問本文冒頭のコードと同じ動作をする循環参照を解決したコードを例示していただければ有難いです。

2

タイトルを修正

2015/08/25 14:39

投稿

sounisi5011
sounisi5011

スコア697

test CHANGED
@@ -1 +1 @@
1
- DOMとクロージャによる循環参照の解決方法
1
+ DOMとクロージャによる循環参照問題の解決方法
test CHANGED
File without changes

1

event.targetをthisと等価であると誤解していたため、event.currentTargetに修正

2015/08/25 14:18

投稿

sounisi5011
sounisi5011

スコア697

test CHANGED
File without changes
test CHANGED
@@ -82,9 +82,9 @@
82
82
 
83
83
  var clickListener = function (e) {
84
84
 
85
- // Eventオブジェクトのtargetプロパティを利用
85
+ // EventオブジェクトのcurrentTargetプロパティを利用
86
86
 
87
- console.log(e.target);
87
+ console.log(e.currentTarget);
88
88
 
89
89
  };
90
90