バリケンのJavaScript日記 RSSフィード

2006-10-23

[] Core JavaScript 1.5 Guide 日本語版を読む(4)  Core JavaScript 1.5 Guide 日本語版を読む(4) - バリケンのJavaScript日記 を含むブックマーク はてなブックマーク -  Core JavaScript 1.5 Guide 日本語版を読む(4) - バリケンのJavaScript日記  Core JavaScript 1.5 Guide 日本語版を読む(4) - バリケンのJavaScript日記 のブックマークコメント

きょうもCore JavaScript 1.5 Guide 日本語版「第3章 コア言語の機能」を引き続き読んでいくよ。

じゃあ、気になったところをメモするよ。

定数

定数はconstで宣言するよ。

>cscript ijs.js
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

js> const prefix = '212';
Exception: 構文エラーです。
js> ^C
>

あれれ?構文エラーなっちゃった

よく調べてみたら、こちらに書いてあったんだね。

定数

読み取り専用の名前付き定数がサポートされています。この機能は JavaScript の C での実装でのみ利用可能です。定数 のページを参照してください。

JavaScript 1.5 における新機能

ということで、JavaScriptのCでの実装、つまりSpiderMonkeyでならうまくいきそうだね。

$ smjs
js> const prefix = '212';
js> prefix
212
js> prefix = '345';
345
js> prefix
212
js> var prefix = '789';
5: TypeError: redeclaration of const prefix
js> ^C
$

へえ、constで定義したあとに再代入してもエラーにはならない(けど代入できてない)んだね。そして、varで再代入しようとするとエラーになるんだね。

[] 関数名はvarconst 関数名はvarかconstか - バリケンのJavaScript日記 を含むブックマーク はてなブックマーク -  関数名はvarかconstか - バリケンのJavaScript日記  関数名はvarかconstか - バリケンのJavaScript日記 のブックマークコメント

constでちょっと気になったのが、「第7章 関数」で紹介されている無名関数のサンプルだよ。

const square = function(number) {return number * number};

じゃあ、普通に名前つきで定義したときは、関数名はconst相当なのかな?var相当なのかな?

実験してみよう!

$ smjs
js> function square1(x) { return x * x; }
js> square1(5)
25
js> var square2 = square1;

function square1(x) {
    return x * x;
}

js> square2(7)
49
js> square1 = 'test';
test
js> square2(3)
9
js> square1
test
js> square1(2)
8: TypeError: square1 is not a function
js> ^C
$

どうやら通常の関数定義はvar相当みたいだよ。

constでも同じように実験してみるね。

$ smjs
js> const square1 = function(x) { return x * x; }
js> square1(5)
25
js> var square2 = square1;
js> square2(7)
49
js> square1 = 'test';
test
js> square1

function (x) {
    return x * x;
}

js> var square1 = 'test';
7: TypeError: redeclaration of const square1
js> ^C
$

やっぱり挙動が違うよね。というわけで、「通常の関数定義は、無名関数var相当の変数名を付けたもの」ということがわかったよ。

トラックバック - http://javascript.g.hatena.ne.jp/muscovyduck/20061023