主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JavaScriptのクロージャ2

                
tags:
JavaScriptのクロージャの動作は前回でわかった。じゃあどう使うの?というわけでどういう定義をされてるか読んでみる。

まずはWikipediaから(参考文献としてWikipediaを使うなと言われる理由もわかるけどまあ)
”引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする”

…だいたいこういうのは意味がわからん。そういうとき個人的にとる方法は参考文献を複数読むということ。一つの事柄でもそれぞれの文献で違った文章で表現することは多々ある。なのでいくらか読んで文から具体的なイメージを想像していく。

というわけで次はDive into Pythonから
”動的な関数の中で外部の引数の値を使うテクニックをクロージャと呼ぶ”

なるほど。関数の中の変数は動的で、どんどん変化していく。その関数内の変化によってreturnされるものが刻々と変わってくるということか。そして関数であるから、外部から引数を受け取ることもできる。

クロージャというのは2点。関数の中で変数の値が保持される、そして関数だから引数も取れるということだろう。


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> 関数クロージャ</title>
<script type="text/javascript">
function outer(name){
var x = 0;
aisatsu=['Hello', 'Goodbye']
function inner(){
alert(aisatsu[x]+", "+name);
if (x==0){x=1
}else {x=0}
};
return inner;
}

var f = outer('John Doe');
f();
f();
f();

var f = outer('World');
f();
f();
f();

var f = outer('John Doe');
f();

</script>
</head>
<body>
<p>...</p>
</body>
</html>
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。