SlideShare a Scribd company logo
1 of 31
Download to read offline
JavaScript入門


                2011/10/24
       h13i32maru@Twitter
         maruyama-r@KLab
自己紹介
• 丸山 亮(h13i32maru) 最近はJSを触ってます
• KLab株式会社所属
32   http://blog.h13i32maru.jp

     http://twitter.com/h13i32maru

     https://www.facebook.com/ryo.maruyama

     https://github.com/h13i32maru
JavaScript面白いよ(´ω`)
でも良く分からないと
はまっちゃう(´・ω・`)
今日は他の言語とは
少し違うところのお話
JavaScriptとは
•   プロトタイプベースのオブジェクト指向言語

•   関数言語の性質もあり

•   シングルスレッド

•   全てパブリック
“関数”
超重要
オブジェクト指向
•   JavaScriptはプロトタイプベース

    -   JavaやPHPはクラスベース

•   あるオブジェクト(プロトタイプ)をカスタマイズ
var MyConstructor = function(){
   this.print = function(){
      console.log("this is MyClass");
   };
}

var a = new MyConstructor();
a.print();
継承
•   あるオブジェクトを継承したオブジェクトを作る

    -   Object#prototype

•   MyConstructorを継承してChildConstructor作る
var MyConstructor = function(){
   this.print = function(){
      console.log("this is MyConstructor");
   };
}

var ChildConstructor = function(){
   this.childPrint = function(){
      console.log("this is ChildConstructor");
   }
}
ChildConstructor.prototype = new MyConstructor();

var b = new ChildConstructor();
b.print(); //this is MyConstructor
b.childPrint(); //this is ChildConstructor
スコープ
•   グローバルスコープと関数スコープのみ

    •   ブロックスコープは無し

•   var hogeで関数スコープになる

•   変数宣言はスコープ先頭になる
function func(){
   var x = 20;

   for(var i = 0; i < 100; i++){
      var x = i;
   }

   console.log(x);
}
func(); //99
x = 10;
y = -10;
function func(){
   x = 20;
   var y = -20;
}
func();
console.log(x); //20
console.log(y); //-10
function func(){
   console.log(x); //undefined
   var x = 10;
   console.log(y); //error
}
func();
x = 10;
function func(){
   console.log(x);
   var x = 20;
}
func(); //undefined
実行時コンテキスト
•   関数は実行時にコンテキスト(this)が決定される

    -   JavaやC++などではコンテキストは不変

•   あるオブジェクトのメソッドを別のオブジェクトのメ
    ソッドとして実行できる
var obj = {
   hoge: 100,
   func: function(){
      console.log(this.hoge);
   }
}

//case 1: “this”はobjコンテキスト
obj.func(); //100

//case 2: “this”はグローバルコンテキスト
var foo = obj.func;
foo(); //undefined

//case 3: “this”はfugaコンテキスト
var fuga = {hoge: -10};
fuga.piyo = obj.func;
fuga.piyo(); //-10
var obj = {
   hoge: 100,
   func: function(){
      console.log(this.hoge);
   }
}

function piyo(func){
   func();
}

function fuga(func, context){
   func.apply(context);
}

piyo(obj.func); //undefined

fuga(obj.func, obj); //100
クロージャ
•   関数外の変数を関数内に内包(クロージング)する

•   関数実行時のスコープ解決に関数生成時のスコープを使
    用する
function hoge(){
   var x = 10;
   var func = function(){
      console.log(x);
   }

    foo(func);
}

function foo(func){
   var x = 100;
   func();
}

hoge(); //10
func = null;
function hoge(){
   var x = 10;

    func = function(){
       console.log(x);
       x++;
    }
}

hoge();
func(); //10
func(); //11
func(); //12
a = [];
for(var i = 0; i < 10; i++){
   a[i] = function(){
      console.log(i);
   }
}

a[0]();
a[2]();
a[4]();
a = [];
for(var i = 0; i < 10; i++){
   a[i] = function(){
      console.log(i);
   }
}

a[0](); //10
a[2](); //10
a[4](); //10
a = [];
for(var i = 0; i < 10; i++){
   a[i] = makeFunc(i);
}

function makeFunc(index){
   return function(){
      console.log(index);
   }
}

a[0](); //0
a[2](); //2
a[4](); //4
a = [];
for(var i = 0; i < 10; i++){
   a[i] = function(index){
       return function(){
          console.log(index);
       }
   }(i);
}

a[0](); //0
a[2](); //2
a[4](); //4
プライベート変数
•   クロージャを使ってプライベート変数やメソッドを作る
    ことができる
var init = function(){
   this.x = 10;

     this.print = function(){
        console.log(this.x);
     };

     this.inc = function(){
        this.x++;
     }
};

var obj = new init();
obj.print(); //10
obj.inc();
obj.print(); //11
console.log(obj.x); //11
var init = function(){
   var x = 10;

     this.print = function(){
        console.log(x);
     };

     this.inc = function(){
        x++;
     }
};

var obj = new init();
obj.print(); //10
obj.inc();
obj.print(); //11
console.log(obj.x); //undefined

var obj2 = new init();
obj2.print(); //10
コーディングスタイル
•   Google JavaScript Style Guide
    •   http://cou929.nu/data/google_javascript_style_guide/#id8


•   JavaScript? Coding Guidelines for Mac OS X
    •   http://developer.apple.com/jp/documentation/ScriptingAutomation/Conceptual/
        JSCodingGuide/


•   Felix's Node.js Style Guide
    •   http://popkirby.github.com/contents/nodeguide/style.html


•   JavaScript? style guide
    •   https://developer.mozilla.org/ja/JavaScript_style_guide
おわり

More Related Content

What's hot

SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32kikairoya
 
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
第3回Webkit/HTML5勉強会 - File APIと加速度センサー第3回Webkit/HTML5勉強会 - File APIと加速度センサー
第3回Webkit/HTML5勉強会 - File APIと加速度センサーnakamura001
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLShinichiAoyagi
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36Tatsuki SHIMIZU
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体digitalghost
 
C++11とゲーム製作
C++11とゲーム製作C++11とゲーム製作
C++11とゲーム製作uchan_nos
 
メタプログラミング C#
メタプログラミング C#メタプログラミング C#
メタプログラミング C#Fujio Kojima
 
Java電卓勉強会資料
Java電卓勉強会資料Java電卓勉強会資料
Java電卓勉強会資料Toshio Ehara
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Toshio Ehara
 
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】株式会社ランチェスター
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSONYuka Ezura
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020Fujio Kojima
 
Java オブジェクトの内部構造
Java オブジェクトの内部構造Java オブジェクトの内部構造
Java オブジェクトの内部構造Taku Miyakawa
 

What's hot (20)

SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32
 
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
第3回Webkit/HTML5勉強会 - File APIと加速度センサー第3回Webkit/HTML5勉強会 - File APIと加速度センサー
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
Task
TaskTask
Task
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36
 
Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
 
C++11とゲーム製作
C++11とゲーム製作C++11とゲーム製作
C++11とゲーム製作
 
メタプログラミング C#
メタプログラミング C#メタプログラミング C#
メタプログラミング C#
 
Java電卓勉強会資料
Java電卓勉強会資料Java電卓勉強会資料
Java電卓勉強会資料
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
 
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSON
 
pecl-AOPの紹介
pecl-AOPの紹介pecl-AOPの紹介
pecl-AOPの紹介
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
 
大人のお型付け
大人のお型付け大人のお型付け
大人のお型付け
 
Java オブジェクトの内部構造
Java オブジェクトの内部構造Java オブジェクトの内部構造
Java オブジェクトの内部構造
 

Similar to JavaScript入門

Miyazaki.js vol.1 スコープの話
Miyazaki.js vol.1 スコープの話Miyazaki.js vol.1 スコープの話
Miyazaki.js vol.1 スコープの話Nobuhiro Nakashima
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューAkira Inoue
 
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文Appresso Engineering Team
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Nextdynamis
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章YOSHIKAWA Ryota
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesNoritada Shimizu
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめYu Nobuoka
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみようKentaro Matsui
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】株式会社ランチェスター
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうHishikawa Takuro
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio CodeAkira Inoue
 

Similar to JavaScript入門 (20)

Miyazaki.js vol.1 スコープの話
Miyazaki.js vol.1 スコープの話Miyazaki.js vol.1 スコープの話
Miyazaki.js vol.1 スコープの話
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
 
OSC京都2011
OSC京都2011OSC京都2011
OSC京都2011
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
 
Dotnetconf2017
Dotnetconf2017Dotnetconf2017
Dotnetconf2017
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょう
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 

More from Ryo Maruyama

Prototypeベース in JavaScript
Prototypeベース in JavaScriptPrototypeベース in JavaScript
Prototypeベース in JavaScriptRyo Maruyama
 
Webサーバの性能測定
Webサーバの性能測定Webサーバの性能測定
Webサーバの性能測定Ryo Maruyama
 
画像を使わずにデザイン
画像を使わずにデザイン画像を使わずにデザイン
画像を使わずにデザインRyo Maruyama
 
勝手に改造 Chrome to Phone
勝手に改造 Chrome to Phone勝手に改造 Chrome to Phone
勝手に改造 Chrome to PhoneRyo Maruyama
 
レインボーテーブルを使ったハッシュの復号とSalt
レインボーテーブルを使ったハッシュの復号とSaltレインボーテーブルを使ったハッシュの復号とSalt
レインボーテーブルを使ったハッシュの復号とSaltRyo Maruyama
 
プログラミング言語Ruby 1章 イントロダクション
プログラミング言語Ruby 1章 イントロダクションプログラミング言語Ruby 1章 イントロダクション
プログラミング言語Ruby 1章 イントロダクションRyo Maruyama
 

More from Ryo Maruyama (15)

jQuery勉強会#4
jQuery勉強会#4jQuery勉強会#4
jQuery勉強会#4
 
jQuery勉強会#3
jQuery勉強会#3jQuery勉強会#3
jQuery勉強会#3
 
Prototypeベース in JavaScript
Prototypeベース in JavaScriptPrototypeベース in JavaScript
Prototypeベース in JavaScript
 
jQuery勉強会#2
jQuery勉強会#2jQuery勉強会#2
jQuery勉強会#2
 
Webサーバの性能測定
Webサーバの性能測定Webサーバの性能測定
Webサーバの性能測定
 
Sphinx/reST
Sphinx/reSTSphinx/reST
Sphinx/reST
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
JSDoc ToolKit
JSDoc ToolKitJSDoc ToolKit
JSDoc ToolKit
 
画像を使わずにデザイン
画像を使わずにデザイン画像を使わずにデザイン
画像を使わずにデザイン
 
AWS Vol.1
AWS Vol.1AWS Vol.1
AWS Vol.1
 
HTML Launcher
HTML LauncherHTML Launcher
HTML Launcher
 
C2DM
C2DMC2DM
C2DM
 
勝手に改造 Chrome to Phone
勝手に改造 Chrome to Phone勝手に改造 Chrome to Phone
勝手に改造 Chrome to Phone
 
レインボーテーブルを使ったハッシュの復号とSalt
レインボーテーブルを使ったハッシュの復号とSaltレインボーテーブルを使ったハッシュの復号とSalt
レインボーテーブルを使ったハッシュの復号とSalt
 
プログラミング言語Ruby 1章 イントロダクション
プログラミング言語Ruby 1章 イントロダクションプログラミング言語Ruby 1章 イントロダクション
プログラミング言語Ruby 1章 イントロダクション
 

Recently uploaded

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (9)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

JavaScript入門

  • 1. JavaScript入門 2011/10/24 h13i32maru@Twitter maruyama-r@KLab
  • 2. 自己紹介 • 丸山 亮(h13i32maru) 最近はJSを触ってます • KLab株式会社所属 32 http://blog.h13i32maru.jp http://twitter.com/h13i32maru https://www.facebook.com/ryo.maruyama https://github.com/h13i32maru
  • 6. JavaScriptとは • プロトタイプベースのオブジェクト指向言語 • 関数言語の性質もあり • シングルスレッド • 全てパブリック
  • 8. オブジェクト指向 • JavaScriptはプロトタイプベース - JavaやPHPはクラスベース • あるオブジェクト(プロトタイプ)をカスタマイズ
  • 9. var MyConstructor = function(){ this.print = function(){ console.log("this is MyClass"); }; } var a = new MyConstructor(); a.print();
  • 10. 継承 • あるオブジェクトを継承したオブジェクトを作る - Object#prototype • MyConstructorを継承してChildConstructor作る
  • 11. var MyConstructor = function(){ this.print = function(){ console.log("this is MyConstructor"); }; } var ChildConstructor = function(){ this.childPrint = function(){ console.log("this is ChildConstructor"); } } ChildConstructor.prototype = new MyConstructor(); var b = new ChildConstructor(); b.print(); //this is MyConstructor b.childPrint(); //this is ChildConstructor
  • 12. スコープ • グローバルスコープと関数スコープのみ • ブロックスコープは無し • var hogeで関数スコープになる • 変数宣言はスコープ先頭になる
  • 13. function func(){ var x = 20; for(var i = 0; i < 100; i++){ var x = i; } console.log(x); } func(); //99
  • 14. x = 10; y = -10; function func(){ x = 20; var y = -20; } func(); console.log(x); //20 console.log(y); //-10
  • 15. function func(){ console.log(x); //undefined var x = 10; console.log(y); //error } func();
  • 16. x = 10; function func(){ console.log(x); var x = 20; } func(); //undefined
  • 17. 実行時コンテキスト • 関数は実行時にコンテキスト(this)が決定される - JavaやC++などではコンテキストは不変 • あるオブジェクトのメソッドを別のオブジェクトのメ ソッドとして実行できる
  • 18. var obj = { hoge: 100, func: function(){ console.log(this.hoge); } } //case 1: “this”はobjコンテキスト obj.func(); //100 //case 2: “this”はグローバルコンテキスト var foo = obj.func; foo(); //undefined //case 3: “this”はfugaコンテキスト var fuga = {hoge: -10}; fuga.piyo = obj.func; fuga.piyo(); //-10
  • 19. var obj = { hoge: 100, func: function(){ console.log(this.hoge); } } function piyo(func){ func(); } function fuga(func, context){ func.apply(context); } piyo(obj.func); //undefined fuga(obj.func, obj); //100
  • 20. クロージャ • 関数外の変数を関数内に内包(クロージング)する • 関数実行時のスコープ解決に関数生成時のスコープを使 用する
  • 21. function hoge(){ var x = 10; var func = function(){ console.log(x); } foo(func); } function foo(func){ var x = 100; func(); } hoge(); //10
  • 22. func = null; function hoge(){ var x = 10; func = function(){ console.log(x); x++; } } hoge(); func(); //10 func(); //11 func(); //12
  • 23. a = []; for(var i = 0; i < 10; i++){ a[i] = function(){ console.log(i); } } a[0](); a[2](); a[4]();
  • 24. a = []; for(var i = 0; i < 10; i++){ a[i] = function(){ console.log(i); } } a[0](); //10 a[2](); //10 a[4](); //10
  • 25. a = []; for(var i = 0; i < 10; i++){ a[i] = makeFunc(i); } function makeFunc(index){ return function(){ console.log(index); } } a[0](); //0 a[2](); //2 a[4](); //4
  • 26. a = []; for(var i = 0; i < 10; i++){ a[i] = function(index){ return function(){ console.log(index); } }(i); } a[0](); //0 a[2](); //2 a[4](); //4
  • 27. プライベート変数 • クロージャを使ってプライベート変数やメソッドを作る ことができる
  • 28. var init = function(){ this.x = 10; this.print = function(){ console.log(this.x); }; this.inc = function(){ this.x++; } }; var obj = new init(); obj.print(); //10 obj.inc(); obj.print(); //11 console.log(obj.x); //11
  • 29. var init = function(){ var x = 10; this.print = function(){ console.log(x); }; this.inc = function(){ x++; } }; var obj = new init(); obj.print(); //10 obj.inc(); obj.print(); //11 console.log(obj.x); //undefined var obj2 = new init(); obj2.print(); //10
  • 30. コーディングスタイル • Google JavaScript Style Guide • http://cou929.nu/data/google_javascript_style_guide/#id8 • JavaScript? Coding Guidelines for Mac OS X • http://developer.apple.com/jp/documentation/ScriptingAutomation/Conceptual/ JSCodingGuide/ • Felix's Node.js Style Guide • http://popkirby.github.com/contents/nodeguide/style.html • JavaScript? style guide • https://developer.mozilla.org/ja/JavaScript_style_guide