SlideShare a Scribd company logo
変数・演算子・文 
開発部 
てるー
アジェンダ 
1. 変数 
2. +演算子 
3. 関数定義式と関数宣言文
アジェンダ 
1. 変数 
2. +演算子 
3. 関数定義式と関数宣言文
変数の宣言 
var x; 
var i, sum; 
var message = ‘hello’; 
var a = 0, b = 0, c = 0;
グローバル変数とローカル変数 
● グローバル変数 
○ 変数の有効範囲はプログラム全体 
● ローカル変数 
○ 変数の有効範囲は変数が宣言された関数の中に限定
グローバル変数とローカル変数 
var g1 = ‘global’; // グローバル変数 
var checkscope = function() { 
var local = ‘local’; // ローカル変数 
g2 = ‘global’; // グローバル変数 
}; 
checkscope();
同じ名前があった場合はローカルを優先 
var scope = ‘global’; 
var checkscope = function() { 
var scope = ‘local’; 
return scope; 
}; 
checkscope(); // local
JavaScript にはブロックスコープがない 
var test = function() { 
for (var k = 0; k < 10; k++) { 
console.log(k); // 0 から 9 が出力される 
} 
console.log(k); // 10 が出力される 
} 
test();
JavaScript にはブロックスコープがない 
function test(obj) { 
if (typeof obj === ‘object’) { 
var j = 0; 
} 
console.log(j); // 0 or undefined が出力される 
}
問題 
var scope = ‘global’; 
var f = function() { 
console.log(scope); // (1) 
var scope = ‘local’; 
console.log(scope); // (2) 
} 
f(); 
● (1) で出力されるのは? 
a. global 
b. local 
c. 上記以外 
● (2) で出力されるのは? 
a. global 
b. local 
c. 上記以外
問題 (答え) 
var scope = ‘global’; 
var f = function() { 
console.log(scope); // (1) 
var scope = ‘local’; 
console.log(scope); // (2) 
} 
f(); 
● (1) で出力されるのは? 
a. global 
b. local 
c. 上記以外 
● (2) で出力されるのは? 
a. global 
b. local 
c. 上記以外
巻き上げ 
var scope = ‘global’; 
var f = function() { 
console.log(scope); // undefined 
var scope = ‘local’; 
console.log(scope); // local 
} 
f(); 
var scope = ‘global’; 
var f = function() { 
var scope; 
console.log(scope); // undefined 
scope = ‘local’; 
console.log(scope); // local 
} 
f(); 
=
アジェンダ 
1. 変数 
2. +演算子 
3. 関数定義式と関数宣言文
「+」演算子は2つの可能性がある 
● 加算 
● 文字列の連結
「加算」 or 「文字列の連結」の判定方法 
1. オペランドのどちらかがオブジェクトの場合、以下の方法で 
基本型値に変換する 
○ Dateオブジェクトの場合は、toString()で変換 
○ それ以外は、valueOf()で変換を試みて、基本型値を返さなかった場合には 
toString()で変換 
2. オペランドの一方が文字列の場合、もう一方のオペランドを 
文字列に変換し、連結処理をする 
3. それ以外の場合は、両方のオペランドを数値にして加算処 
理をする
例 
1 + 2 // 3 
'1' + '2' // '12' 
'1' + 2 // '12' 
1 + {} // '1[object Object]' 
true + true // 2 
2 + null // 2 
2 + undefined // NaN
アジェンダ 
1. 変数 
2. +演算子 
3. 関数の定義
関数の定義方法は3つある 
var f = function(x) { 
return x * x; 
}; 
console.log(f(2)); // 4 
function square(x) { 
return x * x; 
} 
console.log(square(2)); // 4 
関数定義式 
(無名) 
関数宣言文 
関数定義式 
(名前付き) 
var f = function square(x) { 
return x * x; 
}; 
console.log(f(2)); // 4 
console.log(square(2)); // エラー
3 つの差異がある 
● スタックトレース 
● if や while の中での定義 
● 巻き上げ
スタックトレース(1 / 2) 
var f = function() { 
throw new Error(); 
}; 
f(); 
function test() { 
throw new Error(); 
} 
test(); 
関数定義式 
(無名) 
関数宣言文 
関数定義式 
(名前付き) 
var f = function test() { 
throw new Error(); 
}; 
f();
スタックトレース(2 / 2) 
Error 
at f (/Users/teloo/test.js:2:9) 
at Object.<anonymous> (/Users/teloo/test.js:5:1) 
at Module._compile (module.js:456:26) 
... 
Error 
at test (/Users/teloo/test.js:2:9) 
at Object.<anonymous> (/Users/teloo/test.js:5:1) 
at Module._compile (module.js:456:26) 
...
if や while の中での定義 
if (true) { 
var f = function(x) { 
return x * x; 
}; 
console.log(f(2)); // 4 
} 
if (true) { 
function square(x) { 
return x * x; 
} 
console.log(square(2)); // 4 
} 
// IE11, Firefox, Chrome, Node.js 
で確認したところ動作した 
// 仕様的にはしてはいけないらしい 
関数定義式 
(無名) 
関数宣言文 
関数定義式 
(名前付き) 
if (true) { 
var f = function square(x) { 
return x * x; 
}; 
console.log(f(2)); // 4 
}
巻き上げ (1 / 2) 
// TypeError: undefined is not 
a function 
console.log(f(2)); 
var f = function(x) { 
return x * x; 
}; 
console.log(square(2)); // 4 
function square(x) { 
return x * x; 
} 
関数定義式 
(無名) 
関数宣言文 
関数定義式 
(名前付き) 
// TypeError: undefined is not a 
function 
console.log(f(2)); 
var f = function square(x) { 
return x * x; 
};
巻き上げ (2 / 2) 
var f; 
// TypeError: undefined is not 
a function 
console.log(f(2)); 
f = function(x) { 
return x * x; 
}; 
function square(x) { 
return x * x; 
} 
console.log(square(2)); // 4 
関数定義式 
(無名) 
関数宣言文 
関数定義式 
(名前付き) 
var f; 
// TypeError: undefined is not a 
function 
console.log(f(2)); 
f = function square(x) { 
return x * x; 
};
お わ り
宿題 (1 / 4) 
引数またはオプションに入力された文字列を、なんらかの形で 
ファイルに書き込んでいくコマンドを作成せよ。 
● 1行ずつファイルに書き込む形式でもいいし、CSV 形式でも 
いい 
● 各成果物によって仕様が異なるので、README を添付する 
こと
宿題 (2 / 4) 
例 
> addtext hoge -f C:/Users/teloo/data.txt 
> addtext --file C:/Users/teloo/data.txt piyo あああ 
> 
data.txt 
hoge 
piyo 
あああ
宿題 (3 / 4) 
● 目的 
○ Node.js でのファイル操作のやり方を学ぶ 
○ Node.js での外部ライブラリの使用方法を学ぶ
宿題 (4 / 4) 
● Node.js v0.10.26 Manual & Documentation 
○ Node.js の公式のAPIドキュメント 
● commander 
○ コマンドラインのプログラムを簡単に作成するためのライ 
ブラリ 
● 宿題置き場にサンプルプログラムを置きました

More Related Content

PDF
マーク&スイープ勉強会
PDF
V6でJIT・部分適用・継続
PDF
C++ lecture-2
PDF
Emcjp item21
ODP
F#とC#で見る関数志向プログラミング
PDF
Functional Way
PDF
並行プログラミングと継続モナド
PDF
おいしいLisp
マーク&スイープ勉強会
V6でJIT・部分適用・継続
C++ lecture-2
Emcjp item21
F#とC#で見る関数志向プログラミング
Functional Way
並行プログラミングと継続モナド
おいしいLisp

What's hot (20)

PDF
X hago2 shortcoding 20110827
PDF
20120422i phonedeveloperworkshoppublished
PPTX
20130215 fluentd esper_2
PDF
JavaScript入門
PPTX
前期講座09
PDF
GC in C++0x
PDF
emc++ chapter32
PDF
JavaScript 講習会 #1
PPT
言語処理系入門4
PDF
C++ lecture-1
PDF
Scala 初心者が米田の補題を Scala で考えてみた
PPTX
Effective modern C++ 勉強会 #3 Item 12
PDF
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
PDF
Javaセキュアコーディングセミナー東京第1回 演習
PDF
Emcjp item33,34
PDF
templateとautoの型推論
PPTX
JavaScript関数のあれこれ
PPTX
競技プログラミングのためのC++入門
PDF
C++14 Overview
X hago2 shortcoding 20110827
20120422i phonedeveloperworkshoppublished
20130215 fluentd esper_2
JavaScript入門
前期講座09
GC in C++0x
emc++ chapter32
JavaScript 講習会 #1
言語処理系入門4
C++ lecture-1
Scala 初心者が米田の補題を Scala で考えてみた
Effective modern C++ 勉強会 #3 Item 12
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
Javaセキュアコーディングセミナー東京第1回 演習
Emcjp item33,34
templateとautoの型推論
JavaScript関数のあれこれ
競技プログラミングのためのC++入門
C++14 Overview
Ad

Viewers also liked (16)

PPTX
Effective Java 輪読会 項目63-65
PPTX
Effective Java 輪読会 項目53-56
PPTX
Effective Java 輪読会 項目71-73
PPTX
Effective Java 輪読会 項目69-70追加
PPTX
Effective Java 輪読会 項目66-68
PPTX
Effective Java 輪読会 項目69-70
PDF
JavaScript 勉強会 ― 型と値
PPTX
Effective Java 輪読会 項目74-75
PPTX
Effective Java 輪読会 項目60-62
PPTX
Effective Java 輪読会 項目77-78
PPTX
Effective Java 輪読会 項目45-48
PPTX
Effective Java 輪読会 第7章 項目43-44
PPTX
Effective Java 輪読会 項目49-52
PDF
マルチスレッド デザインパターン ― Single Threaded Execution
PDF
20150302 java8 第一回_ラムダ式(1)
PDF
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目53-56
Effective Java 輪読会 項目71-73
Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目69-70
JavaScript 勉強会 ― 型と値
Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目60-62
Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目45-48
Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 項目49-52
マルチスレッド デザインパターン ― Single Threaded Execution
20150302 java8 第一回_ラムダ式(1)
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
Ad

Similar to JavaScript 勉強会 ― 変数・演算子・文 (20)

PDF
JS 6th edition reading circle part 3
PDF
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
PDF
Miyazaki.js vol.1 スコープの話
PDF
ちょっと詳しくJavaScript 第2回【関数と引数】
PDF
Flow.js
PDF
JDK 10 へようこそ
PPTX
サイ本読書会4章変数
PDF
PHP 入門
PDF
Boundary Conditions in OpenFOAM
PDF
Kanazawa.js.Next
PDF
Swift らしい表現を目指そう #eventdots
PDF
Replace Output Iterator and Extend Range JP
PDF
JavaScript基礎勉強会
PDF
08
PPTX
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
KEY
あらためてPHP5.3
PDF
関数プログラミング入門
PDF
関数型プログラミング in javascript
PPTX
PDF
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
JS 6th edition reading circle part 3
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
Miyazaki.js vol.1 スコープの話
ちょっと詳しくJavaScript 第2回【関数と引数】
Flow.js
JDK 10 へようこそ
サイ本読書会4章変数
PHP 入門
Boundary Conditions in OpenFOAM
Kanazawa.js.Next
Swift らしい表現を目指そう #eventdots
Replace Output Iterator and Extend Range JP
JavaScript基礎勉強会
08
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
あらためてPHP5.3
関数プログラミング入門
関数型プログラミング in javascript
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„

More from Appresso Engineering Team (15)

PPTX
Java Day Tokyo 2014 まとめ (chen)
PPTX
Effective java 輪読会 項目57-59
PDF
Effective Java 輪読会 第7章 項目41-42
PPTX
Effective Java 輪読会 第7章 項目38-40
PPTX
Effective Java 輪読会 第6章 項目35-37
PPTX
Effective java 輪読会 第6章 項目32-34
PPTX
Effective java 輪読会 第6章 項目30-31
PPTX
Effective java 輪読会 第5章 項目26-29
PPTX
Effective java 輪読会 第5章 項目23-25
PPTX
Effective java 輪読会 第4章 項目18-22
PPTX
Effective Java 輪読会 第4章 項目13-17
PPTX
Effective java 輪読会 第3章 項目11, 12
PPTX
Effective java 輪読会 第3章 項目8,9,10
PPTX
Effective java 輪読会 第2章 項目5,6,7
PPTX
Effective java 輪読会 第2章 項目1,2,3,4
Java Day Tokyo 2014 まとめ (chen)
Effective java 輪読会 項目57-59
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第6章 項目35-37
Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第5章 項目26-29
Effective java 輪読会 第5章 項目23-25
Effective java 輪読会 第4章 項目18-22
Effective Java 輪読会 第4章 項目13-17
Effective java 輪読会 第3章 項目11, 12
Effective java 輪読会 第3章 項目8,9,10
Effective java 輪読会 第2章 項目5,6,7
Effective java 輪読会 第2章 項目1,2,3,4

JavaScript 勉強会 ― 変数・演算子・文

  • 2. アジェンダ 1. 変数 2. +演算子 3. 関数定義式と関数宣言文
  • 3. アジェンダ 1. 変数 2. +演算子 3. 関数定義式と関数宣言文
  • 4. 変数の宣言 var x; var i, sum; var message = ‘hello’; var a = 0, b = 0, c = 0;
  • 5. グローバル変数とローカル変数 ● グローバル変数 ○ 変数の有効範囲はプログラム全体 ● ローカル変数 ○ 変数の有効範囲は変数が宣言された関数の中に限定
  • 6. グローバル変数とローカル変数 var g1 = ‘global’; // グローバル変数 var checkscope = function() { var local = ‘local’; // ローカル変数 g2 = ‘global’; // グローバル変数 }; checkscope();
  • 7. 同じ名前があった場合はローカルを優先 var scope = ‘global’; var checkscope = function() { var scope = ‘local’; return scope; }; checkscope(); // local
  • 8. JavaScript にはブロックスコープがない var test = function() { for (var k = 0; k < 10; k++) { console.log(k); // 0 から 9 が出力される } console.log(k); // 10 が出力される } test();
  • 9. JavaScript にはブロックスコープがない function test(obj) { if (typeof obj === ‘object’) { var j = 0; } console.log(j); // 0 or undefined が出力される }
  • 10. 問題 var scope = ‘global’; var f = function() { console.log(scope); // (1) var scope = ‘local’; console.log(scope); // (2) } f(); ● (1) で出力されるのは? a. global b. local c. 上記以外 ● (2) で出力されるのは? a. global b. local c. 上記以外
  • 11. 問題 (答え) var scope = ‘global’; var f = function() { console.log(scope); // (1) var scope = ‘local’; console.log(scope); // (2) } f(); ● (1) で出力されるのは? a. global b. local c. 上記以外 ● (2) で出力されるのは? a. global b. local c. 上記以外
  • 12. 巻き上げ var scope = ‘global’; var f = function() { console.log(scope); // undefined var scope = ‘local’; console.log(scope); // local } f(); var scope = ‘global’; var f = function() { var scope; console.log(scope); // undefined scope = ‘local’; console.log(scope); // local } f(); =
  • 13. アジェンダ 1. 変数 2. +演算子 3. 関数定義式と関数宣言文
  • 15. 「加算」 or 「文字列の連結」の判定方法 1. オペランドのどちらかがオブジェクトの場合、以下の方法で 基本型値に変換する ○ Dateオブジェクトの場合は、toString()で変換 ○ それ以外は、valueOf()で変換を試みて、基本型値を返さなかった場合には toString()で変換 2. オペランドの一方が文字列の場合、もう一方のオペランドを 文字列に変換し、連結処理をする 3. それ以外の場合は、両方のオペランドを数値にして加算処 理をする
  • 16. 例 1 + 2 // 3 '1' + '2' // '12' '1' + 2 // '12' 1 + {} // '1[object Object]' true + true // 2 2 + null // 2 2 + undefined // NaN
  • 17. アジェンダ 1. 変数 2. +演算子 3. 関数の定義
  • 18. 関数の定義方法は3つある var f = function(x) { return x * x; }; console.log(f(2)); // 4 function square(x) { return x * x; } console.log(square(2)); // 4 関数定義式 (無名) 関数宣言文 関数定義式 (名前付き) var f = function square(x) { return x * x; }; console.log(f(2)); // 4 console.log(square(2)); // エラー
  • 19. 3 つの差異がある ● スタックトレース ● if や while の中での定義 ● 巻き上げ
  • 20. スタックトレース(1 / 2) var f = function() { throw new Error(); }; f(); function test() { throw new Error(); } test(); 関数定義式 (無名) 関数宣言文 関数定義式 (名前付き) var f = function test() { throw new Error(); }; f();
  • 21. スタックトレース(2 / 2) Error at f (/Users/teloo/test.js:2:9) at Object.<anonymous> (/Users/teloo/test.js:5:1) at Module._compile (module.js:456:26) ... Error at test (/Users/teloo/test.js:2:9) at Object.<anonymous> (/Users/teloo/test.js:5:1) at Module._compile (module.js:456:26) ...
  • 22. if や while の中での定義 if (true) { var f = function(x) { return x * x; }; console.log(f(2)); // 4 } if (true) { function square(x) { return x * x; } console.log(square(2)); // 4 } // IE11, Firefox, Chrome, Node.js で確認したところ動作した // 仕様的にはしてはいけないらしい 関数定義式 (無名) 関数宣言文 関数定義式 (名前付き) if (true) { var f = function square(x) { return x * x; }; console.log(f(2)); // 4 }
  • 23. 巻き上げ (1 / 2) // TypeError: undefined is not a function console.log(f(2)); var f = function(x) { return x * x; }; console.log(square(2)); // 4 function square(x) { return x * x; } 関数定義式 (無名) 関数宣言文 関数定義式 (名前付き) // TypeError: undefined is not a function console.log(f(2)); var f = function square(x) { return x * x; };
  • 24. 巻き上げ (2 / 2) var f; // TypeError: undefined is not a function console.log(f(2)); f = function(x) { return x * x; }; function square(x) { return x * x; } console.log(square(2)); // 4 関数定義式 (無名) 関数宣言文 関数定義式 (名前付き) var f; // TypeError: undefined is not a function console.log(f(2)); f = function square(x) { return x * x; };
  • 26. 宿題 (1 / 4) 引数またはオプションに入力された文字列を、なんらかの形で ファイルに書き込んでいくコマンドを作成せよ。 ● 1行ずつファイルに書き込む形式でもいいし、CSV 形式でも いい ● 各成果物によって仕様が異なるので、README を添付する こと
  • 27. 宿題 (2 / 4) 例 > addtext hoge -f C:/Users/teloo/data.txt > addtext --file C:/Users/teloo/data.txt piyo あああ > data.txt hoge piyo あああ
  • 28. 宿題 (3 / 4) ● 目的 ○ Node.js でのファイル操作のやり方を学ぶ ○ Node.js での外部ライブラリの使用方法を学ぶ
  • 29. 宿題 (4 / 4) ● Node.js v0.10.26 Manual & Documentation ○ Node.js の公式のAPIドキュメント ● commander ○ コマンドラインのプログラムを簡単に作成するためのライ ブラリ ● 宿題置き場にサンプルプログラムを置きました